Well no, there seem to be a specific formula for it. It doesnt seem to matter how many times i try, i get the same results every time.
As you can see on my test this doesnt count for one Wraith where it always is 100% no matter where the missiles land.
I even tried stacked vs non-stacked where it yielded the same result. This one i tested above is stacked.
I will post my test of the non-stacked dmg also. If they wind out to be the same as stacked, there has to be a diminishing returns formula involved as it doesnt matter where the targets are.
Look at my second 3 Wraith test. One got 66/120 HP left, which should seem impossible ye? It seems calculate how many targets are in the area and what dmg should be dished out in total, no matter to whom it gets which is why it got down to 66/120 instead of 72/120 which would be the max dmg possible from a single volley vs one single target.
If the image of the missiles landing spots are true, i would be able to place a Wraith at every those locations and have no diminishing returns. Each wraith should end up with 72/120 or even more (splash), which im pretty sure wont be the case but ill try it anyway :D
Just tested it myself and you are right. This is kinda crazy. It confirms my intuitive understanding that mutas seem to survive a lot longer against valks than I expect them to. The diminishing returns seem even bigger versus mutas than wraiths actually (maybe cuz of the hitbox). With more than 3 clumped together, I see the originally targetted muta taking 10, 11 damage as opposed to 24 (48/2 since explosive damage is halved versus small units), which is a loss of almost 60%.
There definitely seems to be some algorithm that governs how to spread out the damage of a valk missile for every unit in its splash radius, an algorithm different from all other kinds of splash damage. Maybe someone who knows the source code (bwapi?) can explain it.
Are you sure about the 66/120? I've never been able to recreate that and it does seem impossible.
My second theory is that when there's only one unit, there's a special algorithm to deal 100% of the damage. When there's more than one, the default splash algorithm kicks in. Per liquipedia, 36% of the missiles hit the target, dealing 100%, and 64% miss, dealing between 25% and 50% (so let's say 37.5% average). So the expected damage is 100%*36% + 37.5%*64% = 60%, meaning that you would expect to lose 40% of the damage to the target. However, this only applies to the direct target; other targets slightly off center will be missed more. For example, if a unit is at the corner of the missile box then it will be missed completely by a few missiles. Therefore, you would expect to lose more than 40% of the damage, maybe 50% or more. This calculation then explains the findings you are seeing, without having to invent a new splash algorithm. This calculation also explains why mutas take even less damage (smaller hit boxes leading to less splash dealt).
EDIT: According to List of Unit and Building Sizes , mutas have larger sizes than wraiths, but this table might not refer to hit boxes.
I don't think there is any explicit diminished return formula for Valks. Unfortunately you don't give any description of your testing method, which makes it hard to zero in on likely candidates for an explanation. How did you stack the target Wraiths? Were they holding position or moving while being hit? Did you keep track of which one was the primary target and whether that received the full damage? How many repeats did you run for each number? Did you get the exact same distribution of remaining HP each time? And can you keep tests running without ever getting a differing result? Which known factors did you already control for (if any) and how?
On December 29 2020 02:00 StRyKeR wrote: Are you sure about the 66/120? I've never been able to recreate that and it does seem impossible.
My second theory is that when there's only one unit, there's a special algorithm to deal 100% of the damage. When there's more than one, the default splash algorithm kicks in. Per liquipedia, 36% of the missiles hit the target, dealing 100%, and 64% miss, dealing between 25% and 50% (so let's say 37.5% average). So the expected damage is 100%*36% + 37.5%*64% = 60%, meaning that you would expect to lose 40% of the damage to the target. However, this only applies to the direct target; other targets slightly off center will be missed more. For example, if a unit is at the corner of the missile box then it will be missed completely by a few missiles. Therefore, you would expect to lose more than 40% of the damage, maybe 50% or more. This calculation then explains the findings you are seeing, without having to invent a new splash algorithm. This calculation also explains why mutas take even less damage (smaller hit boxes leading to less splash dealt).
EDIT: According to List of Unit and Building Sizes , mutas have larger sizes than wraiths, but this table might not refer to hit boxes.
To be fair, if Valkyrie did 100% at all times they would be way way OP :D
Having a splash algo seems just fair, however it would be nice to know it just for fun
Maybe should test where it maxes out, how many targets it can hit until it stops diminishing dmg per target. This might be at 50%
You guys are massively overthinking this. Air unit repulsion is the simple answer to this problem: A perfect stack is just not possible, the more air units you stack, the more and faster they will drift apart, This (in conjunction with any other unit movement) means that the relative position of each stacked unit relative to the rocket explosions is slightly different and that the more target units there are, the more spread out they will be and the more the primary target will be relatively off-centre of the stack, meaning that statistically the they will be less likely to be hit by all the explosions. If you want to estimate this effect in one single mathematical formula, you'll have to build a fairly sophisticated statistical model first, I am afraid.
I'm leaning towards Freakling's take as well. I think it isn't anything specific to the valkyrie (except the single target taking 100% damage, which is the only exception).
On January 04 2021 02:53 StRyKeR wrote: I'm leaning towards Freakling's take as well. I think it isn't anything specific to the valkyrie (except the single target taking 100% damage, which is the only exception).
It is also worth noting this seemingly rather strange fact: Due to the exact spread pattern of the missiles, a Valkyrie's primary target is consistently the one target in a stack that receives the least damage.
In fact, I'd challenge the OP on the claim that a single targeted Wraith received 100% missile damage. This is not very reproduceable, at least not with a stationary Wraith. A moving Wraith with a lucky spread pattern might work, though, but that would be a statistical outlier.
On January 04 2021 02:53 StRyKeR wrote: I'm leaning towards Freakling's take as well. I think it isn't anything specific to the valkyrie (except the single target taking 100% damage, which is the only exception).
It is also worth noting this seemingly rather strange fact: Due to the exact spread pattern of the missiles, a Valkyrie's primary target is consistently the one target in a stack that receives the least damage.
In fact, I'd challenge the OP on the claim that a single targeted Wraith received 100% missile damage. This is not very reproduceable, at least not with a stationary Wraith. A moving Wraith with a lucky spread pattern might work, though, but that would be a statistical outlier.
OP is correct on this one. This is the first thing I recreated. For single targets, the damage is 100% every single time.
I just checked out the replay. WOW the 3 wraith version (second one) actually DOES go down to 66 hp after one volley! That's crazy. It's not clear if the general splash algo does this or something specific to the valkyrie. Anyone from BWAPI wanna chime in here? Sonko?
I have an explanation for the single target case. Given what we know about the spaghetti code, my bet is that Blizzard wanted you to be able to attack allies / your own units. But the issue is that valks (like reavers) cannot splash damage your own units. So if only the default splash algorithm is used for the valk, attacking yourself would cause 0 damage since they're splash only, even the intended target. They didn't want that, so they made every missile hit with 100% damage to the target unit regardless of miss. But if they do this with multiple units, valks would nonsensically do 100% to every unit even if miss. So once there's more than one target in the splash zone, they apply regular damage. Sloppy code imo, but consistent with their other sloppy coding.
So I believe the behavior versus a single target is indeed SPECIFIC to air units in general. Here are the tests.
Unit - 100% damage rate to single target
Valkyrie - YES Reaver - NO Lurker - NO Firebat - NO (tested vs vulture with speed) Siege Tank - NO Archon - NO (tested vs vulture with speed) Corsair - YES (tested vs interceptors and always did full damage) Infested Terran - NO (tested vs torrasque)
There are three wraiths stacked in this image. This is after the first two missiles of the volley. It did 9 and then 9 damage to one of the wraiths, which should be impossible.
But interestingly enough, one of the other two wraiths took 0 damage and has 120/120 hp left.
So it would seem that the unlucky wraith took additional damage intended for the lucky one, and it has to do with the fact that they're exactly overlapped.
I can't imagine what kind of terrible code would result in this.
If we go by this image as a reference, the top left should take one hit, bottom right 2 hits, center 5 hits at the most per each, this is however not the case as the replay shows.
The map has the test layouts copied so they should act quite the same per each 'site test' but it does not. Top left takes just as much damage as center and bottom right in most cases. Center rarely takes the most damage even though it should.
The damage imo seems to be equalized over how many targets are in the area.
Replay of the next test of expanding the ring until only the center target takes damage.
A big conclusion from this test is that the AOE of valkyrie missiles are insanely large, and my guesses would be that wherever the missile lands it will split the damage to all units that are hit (liquipedia states 3x3 matrix). When its one unit (the target) it will always hit inside a 3x3 matrix of the unit, which means it can never miss a single volley versus its target.
This means also that it may be possible for missiles to land in the same spot many times, seems highly likely after looking at the damage from first replay. And thats why a unit who should be taking less damage (according to image above) gets more damage than the others.
Sonko pointed me to the bwapi source code and I took a look. There is indeed a separate algorithm for "is_air_splash" and it makes two queues, one to deal full damage and one to deal splash.
Let's say L = outer splash radius, M = medium splash radius, S = inner splash radius.
Full queue It builds a queue of units as such: 1) unit can't have same player as bullet's player (if it does, it must be the missile's target) 2) unit can't be the missile firer 3) unit has to be within L distance
Now, if the original bullet's target is in this queue and is within S distance, the queue is truncated to JUST the target, and full damage is dealt to it. Otherwise, a RANDOM unit from this queue is chosen to take full damage.
Splash queue 1) unit can't have same player as bullet's player (if it does, it must be the missile's target) 2) unit can't be the missile firer 3) unit can't be missile target 4) unit can't be interceptor (!!!) 5) unit has to be within L distance
Then for each unit here, it does either 50%, 25%, or no damage depending on distance.
Let's apply it to our problematic cases.
Single target The original target will always be in the Full queue because valkyrie missile has huge L. It doesn't matter whether the target is within S distance because the queue only has size 1 and so the target takes full damage.
The Splash queue omits the original target, so nothing else needs to be done.
Conclusion: single target takes 100% no matter what
Multiple targets As stated above, the original target will always be in the Full queue. Case 1: Target is within S distance of the missile.
It becomes the ONLY element in the queue and takes full damage. We now go to the splash queue. The non-targets within M take 50% and within S take 25%.
Conclusion: target takes 100%, rest take 50% or 25%
Case 2: Target is outside S distance of the missile.
A random unit in the Full queue is chosen to take 100% damage. We now go to the splash queue. The non-targets within M take 50% and within S take 25%.
Conclusion: random unit takes 100%, non-targets take 50% or 25%.
Herein lies the issue -- the splash queue only excludes the target, NOT THE RANDOMLY PICKED UNIT FROM THE FULL QUEUE! So it could be the case that the randomly picked unit was NOT the target, in which case that poor unit would take an additional 50% or 25% damage based on proximity! Let's call this "super damage", when unit takes more than 100% damage.
Note that this super damage can only occur if the target is NOT within S of the missile, because if it were, it would take the 100% from Full queue and be excluded from the Splash queue. Since the missile pattern centers around the target, I imagine that most of the time, the target IS within S of the missile, so we don't see super damage.
Furthermore, it would be the case that the ORIGINAL target actually takes ZERO damage if the random unit picked during Full queue was not the target, since the splash queue specifically omits the target. So the existence of super damage implies the target received zero damage!
Note that the total damage is the same across the cases.
Finally, I think the "diminishing returns" observation is simply due to the fact the average missile misses its target. Let's pretend each missile is a student and each unit is a test question. Now, each student is dumb and scores 50% or 25% normally on any given question. However, the Full queue is a "get out of jail free card" that guarantees you a 100% on exactly one question. So if there is only one question, everyone scores a perfect score. If there are only a few questions, the class average is still high. Add a lot of questions, and it becomes clear that each student is failing.
Another interesting observation is that interceptors are immune to splash damage. In other words, it can never take damage via the Splash queue, so it must get damaged during the Full queue. Every valkyrie missile will hit at most one interceptor for full damage and deal no splash no matter how many interceptors there are. So in fact, valkyries are bad against interceptors. Similarly with corsairs.
Bonus observation:
If a corsair hits a group of say 11 stacked mutas, it will do a full 2.5 damage (not 5, since it's explosive damage) to the one target and 1.25 to the other 10. So no matter how stacked you are, it only does 2.5 to one muta. So if you have a group of corsairs, it helps to target fire one specific muta even if the mutas are clumped so that you do more concentrated damage on that one muta.
Additional details from the Discord discussion when I first approached Sonko about this
Many thanks to PurpleWave and all other participants in the SSCAIT Discord for this. These are things I think that not even progamers and their staff had explored, because they were more worried about outcomes than the internal logic by which these things operate. Valkonic made a splash for a reason. Cheers.
I just wanted to note that "more units mean being more spread out" is not the primary factor in the diminishing returns observed. You'd still see it even if the units were tightly stacked on top of each other. The main factor is the "Full queue" effect which guarantees the missile doing 100% damage to exactly one unit while doing 50%/25% to the rest.
In contrast, ground-based splash does not suffer from diminishing returns when stacked. For example, if a Protoss player were glitching their units into a tight ball to do stacked recall, a siege tank in siege mode could fire a few times and wipe all the units at once, dealing a full 100% damage to every unit. Or if a player drills their workers into one location, a single Reaver scarab would wipe all of them out for 100% damage.
Thanks for the investigation. I learned a lot. I always wondered, why Valkyries are bad vs Carriers, because based on the unit stats, half a control group of valkyries should destroy every interceptor of a Carrier fleet in seconds. Little did I know that they just excluded interceptors from taking any splash damage at all...
On January 06 2021 23:07 StRyKeR wrote: I just wanted to note that "more units mean being more spread out" is not the primary factor in the diminishing returns observed. You'd still see it even if the units were tightly stacked on top of each other. The main factor is the "Full queue" effect which guarantees the missile doing 100% damage to exactly one unit while doing 50%/25% to the rest.
In contrast, ground-based splash does not suffer from diminishing returns when stacked. For example, if a Protoss player were glitching their units into a tight ball to do stacked recall, a siege tank in siege mode could fire a few times and wipe all the units at once, dealing a full 100% damage to every unit. Or if a player drills their workers into one location, a single Reaver scarab would wipe all of them out for 100% damage.
Ya, and what about Archon vs Muta? They ROAST stacked flocks, can literally kill like 36 stacked mutas in 3 hits no problem.
On January 06 2021 23:07 StRyKeR wrote: I just wanted to note that "more units mean being more spread out" is not the primary factor in the diminishing returns observed. You'd still see it even if the units were tightly stacked on top of each other. The main factor is the "Full queue" effect which guarantees the missile doing 100% damage to exactly one unit while doing 50%/25% to the rest.
In contrast, ground-based splash does not suffer from diminishing returns when stacked. For example, if a Protoss player were glitching their units into a tight ball to do stacked recall, a siege tank in siege mode could fire a few times and wipe all the units at once, dealing a full 100% damage to every unit. Or if a player drills their workers into one location, a single Reaver scarab would wipe all of them out for 100% damage.
Ya, and what about Archon vs Muta? They ROAST stacked flocks, can literally kill like 36 stacked mutas in 3 hits no problem.
I believe Archon splash isn't considered air splash, so that makes sense as well.
Each missile does 100% of 6/2 = 3 to one muta and a mix of 50%, 25% to all others, let's average to 33%, which is 1 damage. So each missile does 3*1 + 1*(N - 1) = N + 2 damage, or 8N + 16 damage for an entire volley.
To see the diminishing returns, note that we calculate the baseline denominator as 24N, since if we assume each missile does full damage, which is 3, that yields 24 damage per volley and there are N units. So the efficiency rate is (8N + 16)/24N, or 1/3 + 2/(3N). In other words, the efficiency goes down with N, establishing diminishing returns.
N = 1 => 100% N = 2 => 66% N = 3 => 55% N = 4 => 50% and so on.
Furthermore, the average muta takes (8N + 16)/N = 8 + 16/N damage. At 7 mutas, this is roughly 10 damage. In other words, if you have 7 mutas clumped versus a valk, taking a volley is essentially like each muta taking a single hit from a wraith. Taking into account firing speed, the damage output of a valk versus 7 mutas is about 2.5 wraiths. Might be good to keep in mind when calculating whether you should fight or flee with your mutas.
On January 06 2021 03:37 StRyKeR wrote: I have an explanation for the single target case. Given what we know about the spaghetti code, my bet is that Blizzard wanted you to be able to attack allies / your own units. But the issue is that valks (like reavers) cannot splash damage your own units. So if only the default splash algorithm is used for the valk, attacking yourself would cause 0 damage since they're splash only, even the intended target. They didn't want that, so they made every missile hit with 100% damage to the target unit regardless of miss. But if they do this with multiple units, valks would nonsensically do 100% to every unit even if miss. So once there's more than one target in the splash zone, they apply regular damage. Sloppy code imo, but consistent with their other sloppy coding.
Doesn't explain the > 100% damage though.
Good point, actually. I assume all of you went the route of doing tests on your own Wraiths, using normal melee play and your own Wraiths/Mutas? If so you have to consider that that may completely invalidate results, as far as enemy damage goes. To make sure I'm not just talking out of some false memory, I actually made a test map where I can test it against stacks of enemy and neutral units.
On January 07 2021 08:45 StRyKeR wrote: Some quick math vs N mutas:
Each missile does 100% of 6/2 = 3 to one muta and a mix of 50%, 25% to all others, let's average to 33%, which is 1 damage. So each missile does 3*1 + 1*(N - 1) = N + 2 damage, or 8N + 16 damage for an entire volley.
To see the diminishing returns, note that we calculate the baseline denominator as 24N, since if we assume each missile does full damage, which is 3, that yields 24 damage per volley and there are N units. So the efficiency rate is (8N + 16)/24N, or 1/3 + 2/(3N). In other words, the efficiency goes down with N, establishing diminishing returns.
N = 1 => 100% N = 2 => 66% N = 3 => 55% N = 4 => 50% and so on.
Furthermore, the average muta takes (8N + 16)/N = 8 + 16/N damage. At 7 mutas, this is roughly 10 damage. In other words, if you have 7 mutas clumped versus a valk, taking a volley is essentially like each muta taking a single hit from a wraith. Taking into account firing speed, the damage output of a valk versus 7 mutas is about 2.5 wraiths. Might be good to keep in mind when calculating whether you should fight or flee with your mutas.
On January 06 2021 03:37 StRyKeR wrote: I have an explanation for the single target case. Given what we know about the spaghetti code, my bet is that Blizzard wanted you to be able to attack allies / your own units. But the issue is that valks (like reavers) cannot splash damage your own units. So if only the default splash algorithm is used for the valk, attacking yourself would cause 0 damage since they're splash only, even the intended target. They didn't want that, so they made every missile hit with 100% damage to the target unit regardless of miss. But if they do this with multiple units, valks would nonsensically do 100% to every unit even if miss. So once there's more than one target in the splash zone, they apply regular damage. Sloppy code imo, but consistent with their other sloppy coding.
Doesn't explain the > 100% damage though.
Good point, actually. I assume all of you went the route of doing tests on your own Wraiths, using normal melee play and your own Wraiths/Mutas? If so you have to consider that that may completely invalidate results, as far as enemy damage goes. To make sure I'm not just talking out of some false memory, I actually made a test map where I can test it against stacks of enemy and neutral units.
Read the first post on second page, I figured it out.
Shouldn't make mobile posts while still half asleep in bed in the morning… Also the problem with my own initial test setup was that I did not space out targets fa enough to get real single target damage. The combined spread+splash area of Valkyries is huge (about 5 tiles, it seems, could easily be calculated exactly from the scatter pattern positions and splash radii, of course). However, my statement on the fact that the primary target in a tight stack is always the one to receive the least damage hold empirically true. I'll upload my test map shortly which easily proves this conclusively.Here it is The algorithm, you laid out helps to better zero in on the exact mechanics behind that though: From 14 Missile hits only 5 hit more or less dead-centre, so we can assume that these fully hit the primary target (within 100% splash radius S). However it's probably only to be within 25% radius (L) of all the other missiles, which hit further out. So that gives an estimate of 4/7(5·6 + 9·1.5) ≈ 24, which is pretty accurate, though different, mostly lower values can be observed (it's statistical of course). Getting good estimates for the secondary targets is a lot harder, but it seems that between them "drifting off" into the 50% splash areas of more of the missile explosions and their randomly becoming the primary target of an attack they amass more damage over time than the actual, primary target.
The primary target never takes splash damage, so in your example, the other 9 missiles would do 0 splash damage to the primary target, and can only damage it via the random full queue process.
Primary target takes either 0% or 100%. All others either take 25%, 50%, 125%, or 150%.
Say there are N targets total.
If as you said 5 of 14 missiles hit within S of the primary target, that primary target gets 100% and the rest get say, 33% on average.
Primary: 5*100% Other: 5*33%
The other 9 of 14 missiles pick a random primary target, so every target has 1/N chance of 100%. Non-primary takes, say 33% on average again.
Primary: 9/N*100% Other: 9/N*100% + 9*33%
In summary, for 14 missiles, expected damage taken is:
So ultimately, whether primary takes less damage depends on how many hits are straight on and also what the others on average take. Under the assumptions above, since 5/14 < 1/3, the primary target takes less damage.
Note that this estimation doesn't apply to the corsair since its missile always hits the primary target straight on (within S distance), and so the corsair always does more damage to the primary target (100%) as opposed to others (25% or 50%).
On January 08 2021 01:18 StRyKeR wrote: The primary target never takes splash damage, so in your example, the other 9 missiles would do 0 splash damage to the primary target, and can only damage it via the random full queue process.
Primary target takes either 0% or 100%. All others either take 25%, 50%, 125%, or 150%.
That makes the explanation even more clean-cut.
Say there are N targets total.
If as you said 5 of 14 missiles hit within S of the primary target, that primary target gets 100% and the rest get say, 33% on average.
Primary: 5*100% Other: 5*33%
The other 9 of 14 missiles pick a random primary target, so every target has 1/N chance of 100%. Non-primary takes, say 33% on average again.
Primary: 9/N*100% Other: 9/N*100% + 9*33%
In summary, for 14 missiles, expected damage taken is:
So ultimately, whether primary takes less damage depends on how many hits are straight on and also what the others on average take. Under the assumptions above, since 5/14 < 1/3, the primary target takes less damage.
Note that this estimation doesn't apply to the corsair since its missile always hits the primary target straight on (within S distance), and so the corsair always does more damage to the primary target (100%) as opposed to others (25% or 50%).
Imagine a Corsair with Valkyrie scattering on attacks O_o
Would be nice to actually have all the relevant code sequences quoted here for reference…
Here it is. I'm wondering now if bwapi actually lists which units have air splash. I searched in the repository but couldn't find where such settings are set.
void bullet_deal_splash_damage(bullet_t* b) { auto bb = square_at(b->sprite->position, b->weapon_type->outer_splash_radius); if (is_air_splash) { a_vector<unit_t*> targets; for (unit_t* target : find_units(bb)) { if (target == b->bullet_owner_unit) continue; if (target->owner == b->owner && target != b->bullet_target) continue; if (!weapon_can_target_unit(b->weapon_type, target)) continue; int distance = unit_distance_to(target, b->sprite->position); if (distance > b->weapon_type->outer_splash_radius) continue; if (target == b->bullet_target && distance <= b->weapon_type->inner_splash_radius) { targets = {target}; break; } targets.push_back(target); } if (!targets.empty()) { size_t random_index = 0; if (targets.size() != 1) random_index = lcg_rand(58) % targets.size(); bullet_deal_damage(b, targets[random_index]); } } bool damages_allies = !is_air_splash && b->weapon_type->hit_type != weapon_type_t::hit_type_enemy_splash; for (unit_t* target : find_units(bb)) { if (target == b->bullet_owner_unit && b->weapon_type->id != WeaponTypes::Psionic_Storm) continue; if (!damages_allies && target->owner == b->owner && target != b->bullet_target) continue; if (!weapon_can_target_unit(b->weapon_type, target)) continue; int distance = unit_distance_to(target, b->sprite->position); if (distance > b->weapon_type->outer_splash_radius) continue; if (b->weapon_type->id == WeaponTypes::Psionic_Storm) { if (target->storm_timer) continue; target->storm_timer = 1; } if (is_air_splash) { if (target == b->bullet_target) continue; if (unit_is(target, UnitTypes::Protoss_Interceptor)) continue; } if (!is_air_splash && distance <= b->weapon_type->inner_splash_radius) { bullet_deal_damage(b, target, 1); } else if (!u_burrowed(target)) { if (distance <= b->weapon_type->medium_splash_radius) { bullet_deal_damage(b, target, 2); } else { bullet_deal_damage(b, target, 4); } } } }
This is too much programing and difficult calculations for me. What i wanna know is - do valkyries cost wise inflict more damage to clumped mutas/air units compared to corsairs ?
Awesome write up @StRyKeR. I did a bunch of testing myself, as well as a review of the BWAPI (Although, this can't be considered as gospel, right? It is a fan project, not source code, no?) and I came to the exact same conclusions as you. The only thing I did not specifically test was the "super damage" that you mention, although it does seem plausible. Anyways, I think the best way to conceptualize the Valkyrie missile attack is that it was maybe inspired by how real Anti Air homing missiles operate. Basically, the warhead does not impact a target, but rather explodes nearby in a shaped blast that sends shrapnel into a target aircraft, but also releases a pressure wave due to the explosion. So anyways, I think of it like that. On detonation the HALO missile picks a target nearby (within a 100px radius) to fire its shrapnel at, dealing heavy damage, and collaterally damages any OTHER targets within that explosion radius with the blast wave. Anyways I lowkey like to roleplay like this as it kinda makes the games more fun and immersive.
Also stand by everyone - I'm going to release a map soon that demos how to get perfect U-Turn micro on the Valkyrie, allowing you to fire backwards without glitching basically 100% of the time :_)
On May 12 2021 10:57 ZOrb_ wrote: Awesome write up @StRyKeR. I did a bunch of testing myself, as well as a review of the BWAPI (Although, this can't be considered as gospel, right? It is a fan project, not source code, no?)
It is source code. Not Blizzard source code of course, but it does accurately reproduce the game's behaviour. If it didn't you couldn't run things like a replay viewer on it.
Hey Saber, I found your post and it describes it PERFECTLY. I'm kinda surprised there are no replies because I feel like a lot of people tend to mess up or misunderstand that micro with the Valkyrie. The key is not to "click behind", but rather order the unit to do a RIGHT or LEFT U-turn - whichever one will allow the targeting scan to see the enemy in front as it spins around. I am almost done making both a Valk U-turn demo map as well as a practice map that should get this info out there.
On May 13 2021 02:52 ZOrb_ wrote: Hey Saber, I found your post and it describes it PERFECTLY. I'm kinda surprised there are no replies because I feel like a lot of people tend to mess up or misunderstand that micro with the Valkyrie. The key is not to "click behind", but rather order the unit to do a RIGHT or LEFT U-turn - whichever one will allow the targeting scan to see the enemy in front as it spins around. I am almost done making both a Valk U-turn demo map as well as a practice map that should get this info out there.
That would be sweet ! What do you mean to order the unit to do a left or right U-turn ? Like dont do patrol behind the valk, but at the side 45 degree angle ? Sorry for the question, but there is conflicting tips about valk micro all over the internet.
@stambe if your valkyrie is going straight north and your target is north west you should patrol to the area that makes the valkyrie turn towards the target and not away from the target. If your valkyrie turns the wrong direction it wont shoot.
As far as i know Valkyries use center splash dmg so it definately matters where the missiles hit.. like nuke ,archon and tank splash center splash does 100% to the inner circle and (not fully sure on the lesser circles but i think its) second circle 75%or50% and outta circle is 50%or25%.. the circle diameter on the different center splash types variate, the nuke has the largest circle area
When you patrol click 'behind' the Valkyrie, you are basically giving it 1 of 2 possible orders: Turn CLOCKWISE and retreat, or turn COUNTERCLOCKWISE and retreat. By clicking directly behind, the Valkyrie will choose to turn towards the shortest path. If your Valkyrie is facing north and you click behind and slightly to the right, it will turn clockwise, slightly left and it will turn counterclockwise. When you click exactly behind, you are basically leaving it up to chance whether it will turn right or left. I will explain this further in my Valkyrie practice and demo maps. I should be done in about a week and I will post them here.
Please do remember that if you are shooting zerg or protoss, regen is to be accounted for. The lower the effective damage is, the higher the effectivness of the regeneration.
That is why a single valk is not as scary, but getting it dead soon is a priority for zerg in zvt.
(well... i am assuming that because I am toss :D).
Firebathero uploaded an interesting video recently regarding interceptors and splash damage (he often does deep dives into Starcraft engine behavior via experiments in game):
It's in Korean, but the gist is that he figures out that air units do NO splash to interceptors (as I've found by reading the source code) but ground units and spells do. He tested this by having a group of enemy interceptors (adjusted to 0 shields, 1 hp, 0 damage) attack a tanky unit (e.g. his own Command Center) and then attacking moving into the interceptors with units that have artificially inflated damage. The valk killed 8 units per volley (so one per missile) and the corsair killed one unit per attack, implying no splash damage being done.
However, he finds one more interesting quirk, which is that when his valk attacks his own Command Center, he ends up killing 2-3 interceptors per volley, apparently doing splash. When his corsair attacks his own Command Center, once in a very long while does he kill an interceptor, apparently doing splash.
This phenomenon is again explained by our reading of the source code:
1) yes, indeed, blizzard made a special exception for interceptors to never be included in the splash queue for taking air splash damage
2) valk missiles land in a wide region and do not always land close to the target, so in the case of the Command Center, if the Command Center isn't within the inner splash radius of a valk missile, the full queue is populated with interceptors within the outer splash radius and a RANDOM unit from this queue is chosen to take full damage
3) when a corsair misses its target (every ranged unit has a miss chance of 1/256), the center of the hit is shifted a bit, and since the inner splash radius is fairly small, it may no longer include the target in question, in which case the full queue is populated with interceptors within the outer splash radius and a RANDOM unit from this queue is chosen to take full damage
This brings up one more point, which is that why is the behavior different when attacking interceptors directly versus his own Command Center. The answer is that it is still explained.
In the case of the valk attacking moving into interceptors, each valk missile likely rarely includes the original target in the full queue because interceptors are small and fast moving, and picking a random one within the larger splash radius. Since a valk has huge larger splash radius, it should almost always never have an empty full queue, thus getting one kill per missile. You don't get 8 kills per volley with the Command Center because it is large and stationary so you are fairly likely for the targeted missile to get within the inner splash radius to it to not have to randomly pick from its full queue.
Similarly, the corsair, when it doesn't miss with 1/256 chance, will land its "missile" directly on the unit and so does not have to pick randomly from its full queue.
We can make one more prediction as a result of this understanding which firebathero's video does not show, which is that the valk shouldn't ALWAYS kill 8 interceptors per volley when attack moving into the group of interceptors, which should occur if 1) a missile finds no interceptors within the outer splash radius (rare) or 2) two missiles overkill the same interceptor (rare).
I imagine we'd blow his mind if we told him a valk missile can do > 100% damage sometimes.
On May 19 2021 21:46 StRyKeR wrote:3) when a corsair misses its target (every ranged unit has a miss chance of 1/256), the center of the hit is shifted a bit, and since the inner splash radius is fairly small, it may no longer include the target in question, in which case the full queue is populated with interceptors within the outer splash radius and a RANDOM unit from this queue is chosen to take full damage.
Miss chance only applies to ranged ground attacks (and even for ground attacks it might be just sloppy coding rather than an intended mechanic). Corsairs always hit. The occasional Interceptor kill is from Interceptors that actually were within the 100% splash area when the attack hit.
On May 14 2021 20:25 GGmano wrote: As far as i know Valkyries use center splash dmg so it definately matters where the missiles hit.. like nuke ,archon and tank splash center splash does 100% to the inner circle and (not fully sure on the lesser circles but i think its) second circle 75%or50% and outta circle is 50%or25%.. the circle diameter on the different center splash types variate, the nuke has the largest circle area
Splash radii work different for air units. Read the thread. It is all explained in here, all the way down to the code level.
On May 15 2021 17:53 ZOrb_ wrote: When you patrol click 'behind' the Valkyrie, you are basically giving it 1 of 2 possible orders: Turn CLOCKWISE and retreat, or turn COUNTERCLOCKWISE and retreat. By clicking directly behind, the Valkyrie will choose to turn towards the shortest path. If your Valkyrie is facing north and you click behind and slightly to the right, it will turn clockwise, slightly left and it will turn counterclockwise. When you click exactly behind, you are basically leaving it up to chance whether it will turn right or left. I will explain this further in my Valkyrie practice and demo maps. I should be done in about a week and I will post them here.
On May 19 2021 21:46 StRyKeR wrote:3) when a corsair misses its target (every ranged unit has a miss chance of 1/256), the center of the hit is shifted a bit, and since the inner splash radius is fairly small, it may no longer include the target in question, in which case the full queue is populated with interceptors within the outer splash radius and a RANDOM unit from this queue is chosen to take full damage.
Miss chance only applies to ranged ground attacks (and even for ground attacks it might be just sloppy coding rather than an intended mechanic). Corsairs always hit. The occasional Interceptor kill is from Interceptors that actually were within the 100% splash area when the attack hit.
The corsair clearly misses the CC, so it must be the case that air units can miss.
Also, your understanding of air splash is incorrect here. If you assume the corsair never misses, then it CANNOT deal damage to any interceptor because its target is the CC and the full queue is populated with ONLY the original target if it is within the inner splash radius, which must be the case if the corsair does not miss since the CC is stationary.
On May 19 2021 21:46 StRyKeR wrote:3) when a corsair misses its target (every ranged unit has a miss chance of 1/256), the center of the hit is shifted a bit, and since the inner splash radius is fairly small, it may no longer include the target in question, in which case the full queue is populated with interceptors within the outer splash radius and a RANDOM unit from this queue is chosen to take full damage.
Miss chance only applies to ranged ground attacks (and even for ground attacks it might be just sloppy coding rather than an intended mechanic). Corsairs always hit. The occasional Interceptor kill is from Interceptors that actually were within the 100% splash area when the attack hit.
The corsair clearly misses the CC, so it must be the case that air units can miss.
Also, your understanding of air splash is incorrect here. If you assume the corsair never misses, then it CANNOT deal damage to any interceptor because its target is the CC and the full queue is populated with ONLY the original target if it is within the inner splash radius, which must be the case if the corsair does not miss since the CC is stationary.
Anti-air attacks definitely have no miss chance. Since air units are not influenced by terrain levels miss chances are not applied when they are attacked. I suspect the reason for the target switch may be the difference between the CC position (centre of the CC) and the hit position of the attack which is far enough offset to put the CC outside the inner splash radius.
EDIT: Although looking at the distance function, as long as the weapon sprite is within the bounding box of the unit it should still be the primary target:
int unit_distance_to(const unit_t* u, xy pos) const { return xy_length(pos - nearest_pos_in_rect(pos, unit_sprite_bounding_box(u))); }
So there must be something else going on entirely. Maybe lifted buildings don't have a bounding box…
EDIT: Nevermind, according to in-game testing miss chance seems to apply to air splash attacks, but not to single target air attacks.
I am very certain that the 1/256 miss chance DOES apply to anti air attacks. I have seen VODs where a goliath volley will shoot and one missile will land on the target, dealing damage, and the second missile will land far short and 'miss' dealing no damage. I will try to find a clip of this as I saw it recently in either an ASL or Artosis stream. I also want to make a clarification on a misunderstanding on "inner splash radius" as it pertains to air to air splash.
I know that it is often labeled as an inner, medium, and outer radius with accompanying pixel lengths, but how the game internally decides what to do with that information is hidden from us and not necessarily intuitive. A siege tank, for example, is very simple, A target either takes 100%, 50%, or 25% dmg based on its distance to the attack epicenter. The broodwar Air-to-air splash units (Valk, Sair, Devo) are more complicated. The game doesn't just scan each region to determine the splash damage amount. It uses the inner radius (5px for both Corsair and Valkyrie) to FIND its intended initial target, and deal 100% to ONLY THAT UNIT. Yes that is correct, both the Valk and the Sair deal 100% damage to ONLY ONE UNIT PER SHOT. I have tested this extensively and would be happy to provide test maps or directions to anyone looking to confirm. An example of how I tested this on a map for the corsair: set Neutron Flare damage to 200, set Mutalisk armor to 100 and health to 40. Add a singular CPU Corsair to the map, add full group of 11 mutas for the player. Group the Mutalisks with a larva to stack, and stack them HEALIVY. Set game speed to slowest (use the '-' key), and stack the Mutas hard and fly around the Corsair. Every time the corsair attacks, ONE and ONLY ONE Mutalisk will die, despite the fact that all the Mutas are within 5px of one another.
Anyways, just an interesting quirk that most people don't know about. Feel free to respond if you want me to find the map I used for testing to post it
Something to keep in mind when exploring the inner workings of older games (I'd say any games from the mid 2000s and before) is that they tend to be a lot LESS formulaic compared to today's standards, and a lot less conclusions can be correctly drawn from analyzing the game's data. A lot of this has to do with the fact that object-oriented programming was a lot less pervasive and less popular at the time, meaning that different parts of a games assets and scripts where made from scratch for each unit, attack, animation etc. rather that just creating an "object" for units, animations, flingys etc, and just altering a few values here and there to add diversity to the game. Although I am confident that Blizzard used objects in C++ to create a lot of things in Broodwar, there are a lot more 'special cases' in old games where programmers grabbed values from an object's data structure and ran them specific scripts to add flavor to the game. I think this applies here where we see that the general splash formula applies differently on different units. Another example is how move speed applies to zerglings. Rather than just translocating a Zergling "X" px to the right or left on each frame, the zergling follows an iscript that move them a in the following repeating pattern of px per frame [ 2 8 9 5 6 7 2 ]. This is likely due to the fact that just moving the unit at a constant velocity would look 'off', as it would not match the bounding gait of the Zergling as it moved. I for one am a huge fan of this kind of stuff as it adds a lot more flavor and depth to the game, which is evident as we are still currently discussing basic mechanics that, although subtle, have not been fully understood for 20+ years.
Also, based on Stryker's post, I want to mention a couple Valkyrie strategies vs Protoss that is actually somewhat viable. I know most of us here are familiar with the quick launch interceptor trick on the carrier where you first attack an allied building before moving your carrier into battle. The reason that trick works is not actually because the Interceptors "launch" quickly, but rather that they never actually re-enter the Carrier if it keeps moving. This is likely due to the order-of-operations not quite lining up in the code to both move the Interceptors to the Carrier's center, and then check to re-enter, before moving the Carrier unit its self. Anyways, I digress. The point is that when an enemy has prepared this technique, or is simply relocating their Carriers in battle without allowing the Interceptors to re-enter, you basically have a situation where potentially dozens of Interceptors are stacked underneath the Carrier group. Now, although they do NOT take splash damage as we commonly understand it, they will be the recipient of the random full damage Valkyrie missile around 50% of time if the Valkyrie is firing upon the Carrier group. This can allow a large group of Valkyries to destroy interceptors underneath the Carriers while also dealing splash damage to the capitol ships themselves. Part of the reason this works is because when Interceptors are low on HP, they will enter the Carrier to recharge, but this does not happen when the carrier is moving for the reasons described above.
Another related way to use Valkyries against Carriers is actually to exploit the above Interceptor behavior to damage the Carriers indirectly. By firing a large salvo against the Interceptors, you will trigger some of them to fly back to the Carrier to recharge, whilst dragging a massive cloud of HALO rockets to the Carrier group (Think the final battle from Galaxy Quest LOL). This can allow you to not only shoo away Interceptors from your base by forcing them to retreat and repair (The Interceptor repair mechanic is AI and can not be cancelled), but you will also damage the Carriers from afar, effectively increasing the range of the Valkyries in the process. This is actually a legitimate strategy once you practice it, although once you have destroyed the Carriers, your Valkyries are borderline useless against the rest of the Protoss army.
@ZOrb: The algorithm for air splash is explained in detail by Stryker, including the relevant OpenBW code. The short of it is: Air splash only ever applies the full damage to one unit, all other units within the splash radii receive 50% or 25%, depending on their distance from the attack position.
Furthermore, after some more study of the attack code and systematic in-game testing of different units it is clear that I was wrong and the default 1/256 miss chance does in deed apply to all anti-air attacks as well. It's just hard to observe for some units (particularly for Mutalisks and Wraiths which have relatively low attack speeds, and a miss statistically only happens about once every 20 volleys from a control group and still can be hard to even spot with all the vapour trail sprites going on with their attacks).
On May 22 2021 15:45 ZOrb_ wrote: Also, based on Stryker's post, I want to mention a couple Valkyrie strategies vs Protoss that is actually somewhat viable. I know most of us here are familiar with the quick launch interceptor trick on the carrier where you first attack an allied building before moving your carrier into battle. The reason that trick works is not actually because the Interceptors "launch" quickly, but rather that they never actually re-enter the Carrier if it keeps moving. This is likely due to the order-of-operations not quite lining up in the code to both move the Interceptors to the Carrier's center, and then check to re-enter, before moving the Carrier unit its self. Anyways, I digress. The point is that when an enemy has prepared this technique, or is simply relocating their Carriers in battle without allowing the Interceptors to re-enter, you basically have a situation where potentially dozens of Interceptors are stacked underneath the Carrier group. Now, although they do NOT take splash damage as we commonly understand it, they will be the recipient of the random full damage Valkyrie missile around 50% of time if the Valkyrie is firing upon the Carrier group. This can allow a large group of Valkyries to destroy interceptors underneath the Carriers while also dealing splash damage to the capitol ships themselves. Part of the reason this works is because when Interceptors are low on HP, they will enter the Carrier to recharge, but this does not happen when the carrier is moving for the reasons described above.
Another related way to use Valkyries against Carriers is actually to exploit the above Interceptor behavior to damage the Carriers indirectly. By firing a large salvo against the Interceptors, you will trigger some of them to fly back to the Carrier to recharge, whilst dragging a massive cloud of HALO rockets to the Carrier group (Think the final battle from Galaxy Quest LOL). This can allow you to not only shoo away Interceptors from your base by forcing them to retreat and repair (The Interceptor repair mechanic is AI and can not be cancelled), but you will also damage the Carriers from afar, effectively increasing the range of the Valkyries in the process. This is actually a legitimate strategy once you practice it, although once you have destroyed the Carriers, your Valkyries are borderline useless against the rest of the Protoss army.
All of this is way too inefficient and situational though: - You assuming you can just catch the Carriers on the move without the Protoss player reacting. Unlikely. - And then there is the fact that no matter how you go about it, Halo missile damage is actually too low to deal any significant damage against heavy Carrier amour (2 damage on a full hit, otherwise 1, .5). It's just not effective or cost efficient.
It is situational, and yes, you deal low damage per shot per carrier. However, vs 5 or 6 carriers, your DPS is actually still very high due to splash dealing about 40 damage per volley vs hull and around 150 per volley vs shields PER Valkyrie. If you play around in a custom map, and are very good at the micro, it is actually quite cost effective in your favor. I don't know how practical it would be in a real game, due to the lack of utility of the Valkyries after the battle, but I really do think it is a potentially viable untapped strategy, even as unlikely as it seems from a glance. If you can do the U-turn trick very well, and also due the trick I described above about firing on the ints, and having the missiles follow them back to the Carrier, you can actually bully Carriers in a really exciting way. Either way it is a lot of fun to try, even just in a 1p UMS map. I know it sounds crazy, but try it out!
On May 22 2021 19:48 ZOrb_ wrote: It is situational, and yes, you deal low damage per shot per carrier. However, vs 5 or 6 carriers, your DPS is actually still very high due to splash dealing about 40 damage per volley vs hull and around 150 per volley vs shields PER Valkyrie. If you play around in a custom map, and are very good at the micro, it is actually quite cost effective in your favor. I don't know how practical it would be in a real game, due to the lack of utility of the Valkyries after the battle, but I really do think it is a potentially viable untapped strategy, even as unlikely as it seems from a glance. If you can do the U-turn trick very well, and also due the trick I described above about firing on the ints, and having the missiles follow them back to the Carrier, you can actually bully Carriers in a really exciting way. Either way it is a lot of fun to try, even just in a 1p UMS map. I know it sounds crazy, but try it out!
ZOrb is right. Ive been using this tactic since 2005 in my low/medium skilled games in PGTour and ICCup. The tricks is to build no more than 5-8 Valks(cause more than that and they cant shoot in SC:BW, dunno about remastered) and keep them away from the Carriers. Never engage the carriers directly. Stay above Turrets or above your Goliaths and lets them fire volleys at the stray interceptors at the Carriers maximum leash range(12 or more then are in flight pattern) or further. Some interceptors will get bellow 10 shields and will be the target for a lot of Halo rockets, making them retreat to the carriers and pulling the rocket cloud with them to the stacked Carriers fleet. Now with the newly refined Patrol Micro for valks, you can dance your Valks and bait the toss to target them and you do the patrol trick, making the Interceptors fly towards the valks, but then they get out of the max leash range of the Carriers (12) and need to return to the carriers, making the valks shoot and the entire Halo rocket cloud is dragged onto the Carrier Fleet. This strat is most usefull when Carrier numbers get above 8 where Terrans start to struggle with only pure Goliaths. The trick works quite well then there are Goliaths fighting the Carriers and you try to stutter step your goliaths to kill carriers making the P retreat and then attack the interceptors with the Valks. Its hard to explain, but i was always a huge valk fan since i startet playing BW in '98 and i hated players and pros alike, dissing the valk for being useless, making me try to find tricks and strats with them to make them worthwhile. Im pretty sure someone will make a map to practice that start, but ive made it work in real games.
ZOrb i think you made a miscalculation - there is no way a single Valk can do 150 dmg per volley to shields or 40 dmg per volley to Carrier hull with base armor 4. I dont know the exact numbers, cause valk splash works in non-standart way as described in this thread, but if we take that you have +1 for Valks for medium splash area (50%) thats (7*0,5)-4 = 3,5-4 = 0,5 dmg(thats minimum possible damage in the game) per rocket to the hull for Carrier. So a volley will do 8*0,5 = 4 dmg.
Yes! I have made a map for this very purpose if you want to try it. I am just polishing up the terrain so it as at least SOMEWHAT pretty and I'll upload it to BW maps and provide a link. As for the damage calculation, my numbers are calculated based on the total splash done across 6 carriers 8*(6-4) + 5*8*.5 = 16+20 = 36 vs. hull; 8*6 + 5*8*3 = 168 vs. shields. Sorry if that was not clear.
On May 24 2021 14:50 ZOrb_ wrote: Yes! I have made a map for this very purpose if you want to try it. I am just polishing up the terrain so it as at least SOMEWHAT pretty and I'll upload it to BW maps and provide a link. As for the damage calculation, my numbers are calculated based on the total splash done across 6 carriers 8*(6-4) + 5*8*.5 = 16+20 = 36 vs. hull; 8*6 + 5*8*3 = 168 vs. shields. Sorry if that was not clear.
I would love to try the map! I didn't took into consideration you calculated for 6 carriers, since this type of investment and micro management is worth it vs 8+ carriers IMHO, where pure gols no longer cut it especially on maps with tough terrain and many obstacles. In this modern age of SC:R i think vs mass carriers you either have to invest in lockdown or go for the valkyrie zoning if i can call it that. TBH recently i havent seen tosses get above 8 carriers in carrier games. I guess having a strong ground army is not to be underestimated
On May 22 2021 15:45 ZOrb_ wrote: Also, based on Stryker's post, I want to mention a couple Valkyrie strategies vs Protoss that is actually somewhat viable. I know most of us here are familiar with the quick launch interceptor trick on the carrier where you first attack an allied building before moving your carrier into battle. The reason that trick works is not actually because the Interceptors "launch" quickly, but rather that they never actually re-enter the Carrier if it keeps moving. This is likely due to the order-of-operations not quite lining up in the code to both move the Interceptors to the Carrier's center, and then check to re-enter, before moving the Carrier unit its self. Anyways, I digress. The point is that when an enemy has prepared this technique, or is simply relocating their Carriers in battle without allowing the Interceptors to re-enter, you basically have a situation where potentially dozens of Interceptors are stacked underneath the Carrier group. Now, although they do NOT take splash damage as we commonly understand it, they will be the recipient of the random full damage Valkyrie missile around 50% of time if the Valkyrie is firing upon the Carrier group. This can allow a large group of Valkyries to destroy interceptors underneath the Carriers while also dealing splash damage to the capitol ships themselves. Part of the reason this works is because when Interceptors are low on HP, they will enter the Carrier to recharge, but this does not happen when the carrier is moving for the reasons described above.
Another related way to use Valkyries against Carriers is actually to exploit the above Interceptor behavior to damage the Carriers indirectly. By firing a large salvo against the Interceptors, you will trigger some of them to fly back to the Carrier to recharge, whilst dragging a massive cloud of HALO rockets to the Carrier group (Think the final battle from Galaxy Quest LOL). This can allow you to not only shoo away Interceptors from your base by forcing them to retreat and repair (The Interceptor repair mechanic is AI and can not be cancelled), but you will also damage the Carriers from afar, effectively increasing the range of the Valkyries in the process. This is actually a legitimate strategy once you practice it, although once you have destroyed the Carriers, your Valkyries are borderline useless against the rest of the Protoss army.
All of this is way too inefficient and situational though: - You assuming you can just catch the Carriers on the move without the Protoss player reacting. Unlikely. - And then there is the fact that no matter how you go about it, Halo missile damage is actually too low to deal any significant damage against heavy Carrier amour (2 damage on a full hit, otherwise 1, .5). It's just not effective or cost efficient.
I've beaten S rank Protoss users who are going carriers with valkyries
On May 22 2021 15:45 ZOrb_ wrote: Also, based on Stryker's post, I want to mention a couple Valkyrie strategies vs Protoss that is actually somewhat viable. I know most of us here are familiar with the quick launch interceptor trick on the carrier where you first attack an allied building before moving your carrier into battle. The reason that trick works is not actually because the Interceptors "launch" quickly, but rather that they never actually re-enter the Carrier if it keeps moving. This is likely due to the order-of-operations not quite lining up in the code to both move the Interceptors to the Carrier's center, and then check to re-enter, before moving the Carrier unit its self. Anyways, I digress. The point is that when an enemy has prepared this technique, or is simply relocating their Carriers in battle without allowing the Interceptors to re-enter, you basically have a situation where potentially dozens of Interceptors are stacked underneath the Carrier group. Now, although they do NOT take splash damage as we commonly understand it, they will be the recipient of the random full damage Valkyrie missile around 50% of time if the Valkyrie is firing upon the Carrier group. This can allow a large group of Valkyries to destroy interceptors underneath the Carriers while also dealing splash damage to the capitol ships themselves. Part of the reason this works is because when Interceptors are low on HP, they will enter the Carrier to recharge, but this does not happen when the carrier is moving for the reasons described above.
Another related way to use Valkyries against Carriers is actually to exploit the above Interceptor behavior to damage the Carriers indirectly. By firing a large salvo against the Interceptors, you will trigger some of them to fly back to the Carrier to recharge, whilst dragging a massive cloud of HALO rockets to the Carrier group (Think the final battle from Galaxy Quest LOL). This can allow you to not only shoo away Interceptors from your base by forcing them to retreat and repair (The Interceptor repair mechanic is AI and can not be cancelled), but you will also damage the Carriers from afar, effectively increasing the range of the Valkyries in the process. This is actually a legitimate strategy once you practice it, although once you have destroyed the Carriers, your Valkyries are borderline useless against the rest of the Protoss army.
All of this is way too inefficient and situational though: - You assuming you can just catch the Carriers on the move without the Protoss player reacting. Unlikely. - And then there is the fact that no matter how you go about it, Halo missile damage is actually too low to deal any significant damage against heavy Carrier amour (2 damage on a full hit, otherwise 1, .5). It's just not effective or cost efficient.
I've beaten S rank Protoss users who are going carriers with valkyries
Each splash radius is affected by armor reduction.
Carrier has base 4 armor so each missile do 0.5 dmg in splash radius.
As Stryker explained earlier, only one target is eligible for full damage per missile.
If the aimed target is missed, it will be dealt no damage/splash, and someone else gets the full dmg + eligible splash (in total 125-150% dmg).
From my tests 8 valks are better than 11 wraiths vs many carriers. The reason is simply because depending on target amount you dish out more dmg from the splash, even if its just a few points.
I would argue valks are always better than wraiths. (more hp/armor/range, less apm needed, retreating fire, builds faster)