• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

[Trigger] (Spell Request) Dragon's Fire Arrow

Level 15
Joined
Jul 19, 2007
Messages
857
I would like someone to make this arrow ability to me in my map.
Faramir fires a powerful ancient flame arrow at the target enemy which explodes upon contact with it, causing initial AoE damage based on Faramir's total agility. Ignited enemies suffer an additional 35% of the initial damage over 5 seconds.

|n|n|cffffcc00Level 1|r - 250 + 50% of Faramir's total agility as damage.|n|cffffcc00Level 2|r - 250 + 100% of Faramir's total agility as damage.|n|cffffcc00Level 3|r - 250 + 150% of Faramir's total agility as damage.|n|n|cffFF0000AOE: |r 240|n|cffFFFF00Cast Range: |r 2000|n|cff0000FFMana Cost: |r 170/220/270|n|cff99ccffCooldown: |r 110/95/80 seconds.
 
Level 45
Joined
Feb 27, 2007
Messages
5,578
This is really easy to do with a dummy-cast Acid Bomb and the field natives to change the ability's damage before it is cast. This does require you to understand how the AB damage fields work, though:
  • Damage Interval (DI): how frequently the DoT ticks (in seconds) counted from when the ability first hits.
  • Duration: how long the debuff persists, which also caps the total number of damage ticks that can occur (for example: if duration is 1.2 seconds and DI is 1 second, two damage ticks will occur). Set this too short and it will never damage even one tick.
  • Primary Damage: dealt to the cast-target upon impact and every DI after that.
  • Secondary Damage: dealt to everything else in the AoE upon impact and every DI after that.
You cannot separate the tick damage and impact damage on a single cast, but you could cast it twice with two different damage amounts to simulate that; I'll do that below:
  • Actions
    • -------- running from an ability effect event --------
    • Set VariableSet BASE_DMG[1] = 250.00
    • Set VariableSet BASE_DMG[2] = 250.00
    • Set VariableSet BASE_DMG[3] = 250.00
    • Set VariableSet AGI_SCALING[1] = 0.50
    • Set VariableSet AGI_SCALING[2] = 1.00
    • Set VariableSet AGI_SCALING[3] = 1.50
    • Set VariableSet BURN_FACTOR = 0.35
    • Set VariableSet TICK_RATE = (Ability: ABL's Real Level Field Damage Interval ('Nab6'), of Level: 0) //so you can set this in the OE and not have to hardcode the value in
    • Set VariableSet DURATION = (Ability: ABL's Real Level Field Duration - Normal ('adur'), of Level: 0) //this reads normal duration but hero duration [I]could[/I] be different if you care
    • -------- --------
    • Set VariableSet TP = (Position of (Triggering unit))
    • Unit - Create 1 YOURDUMMY_TYPE for (Owner of (Triggering unit)) at TP facing Default building facing degrees //THIS DUMMY MUST BE ABLE TO CAST INSTANTANEOUSLY WITHOUT TURNING; all cast points 0, movement none, speed base 0, etc.
    • Set VariableSet TempUnit = (Last created unit)
    • Unit - Add a DURATION second Generic expiration timer to TempUnit
    • Custom script: call RemoveLocation(udg_TP) //change name to match your variable, but keep the udg_
    • Set VariableSet ABL_CODE = Acid Bomb NEW
    • Unit - Add ABL_CODE to TempUnit
    • Set VariableSet ABL = (Unit: TempUnit's Ability with Ability Code: ABL_CODE)
    • Set VariableSet LVL = (Level of (Ability being cast) for (Triggering unit))
    • Set VariableSet DMG = (BASE_DMG[LVL] + (AGI_SCALING[LVL] x (Real((Agility of (Triggering unit) (Include bonuses))))))
    • -------- --------
    • Ability - Set Ability: ABL's Real Level Field: Primary Damage ('Nab4') of Level: 0 to DMG
    • Ability - Set Ability: ABL's Real Level Field: Secondary Damage ('Nab5') of Level: 0 to DMG
    • Ability - Set Ability: ABL's Real Level Field: Duration - Hero ('ahdu') of Level: 0 to 0.10
    • Ability - Set Ability: ABL's Real Level Field: Duration - Normal ('adur') of Level: 0 to 0.10
    • Unit - Increase level of ABL_CODE for TempUnit //ABILITY MUST HAVE A SECOND LEVEL TO REFRESH FIELDS, EVEN IF YOU NEVER USE IT FOR ANYTHING
    • Unit - Decrease level of ABL_CODE for TempUnit
    • Unit - Order TempUnit to Neutral Alchemist - Acid Bomb (Target unit of ability being cast)
    • -------- --------
    • Set VariableSet DMG = ((DMG / (DURATION / TICK_RATE)) x BURN_FACTOR)
    • Ability - Set Ability: ABL's Real Level Field: Primary Damage ('Nab4') of Level: 0 to DMG
    • Ability - Set Ability: ABL's Real Level Field: Secondary Damage ('Nab5') of Level: 0 to DMG
    • Ability - Set Ability: ABL's Real Level Field: Duration - Hero ('ahdu') of Level: 0 to DURATION
    • Ability - Set Ability: ABL's Real Level Field: Duration - Normal ('adur') of Level: 0 to DURATION
    • Unit - Increase level of ABL_CODE for TempUnit
    • Unit - Decrease level of ABL_CODE for TempUnit
    • Unit - Order TempUnit to Neutral Alchemist - Acid Bomb (Target unit of ability being cast)
 
Last edited:
Level 15
Joined
Jul 19, 2007
Messages
857
This is really easy to do with a dummy-cast Acid Bomb and the field natives to change the ability's damage before it is cast. This does require you to understand how the AB damage fields work, though:
  • Damage Interval (DI): how frequently the DoT ticks (in seconds) counted from when the ability first hits.
  • Duration: how long the debuff persists, which also caps the total number of damage ticks that can occur (for example: if duration is 1.2 seconds and DI is 1 second, two damage ticks will occur). Set this too short and it will never damage even one tick.
  • Primary Damage: dealt to the cast-target upon impact and every DI after that.
  • Secondary Damage: dealt to everything else in the AoE upon impact and every DI after that.
You cannot separate the tick damage and impact damage on a single cast, but you could cast it twice with two different damage amounts to simulate that; I'll do that below:
  • Actions
    • -------- running from an ability effect event --------
    • Set VariableSet BASE_DMG[1] = 250.00
    • Set VariableSet BASE_DMG[2] = 250.00
    • Set VariableSet BASE_DMG[3] = 250.00
    • Set VariableSet AGI_SCALING[1] = 0.50
    • Set VariableSet AGI_SCALING[2] = 1.00
    • Set VariableSet AGI_SCALING[3] = 1.50
    • Set VariableSet BURN_FACTOR = 0.35
    • Set VariableSet TICK_RATE = (Ability: ABL's Real Level Field Damage Interval ('Nab6'), of Level: 0) //so you can set this in the OE and not have to hardcode the value in
    • Set VariableSet DURATION = (Ability: ABL's Real Level Field Duration - Normal ('adur'), of Level: 0) //this reads normal duration but hero duration [I]could[/I] be different if you care
    • -------- --------
    • Set VariableSet TP = (Position of (Triggering unit))
    • Unit - Create 1 YOURDUMMY_TYPE for (Owner of (Triggering unit)) at TP facing Default building facing degrees //THIS DUMMY MUST BE ABLE TO CAST INSTANTANEOUSLY WITHOUT TURNING; all cast points 0, movement none, speed base 0, etc.
    • Set VariableSet TempUnit = (Last created unit)
    • Unit - Add a DURATION second Generic expiration timer to TempUnit
    • Custom script: call RemoveLocation(udg_TP) //change name to match your variable, but keep the udg_
    • Set VariableSet ABL_CODE = Acid Bomb NEW
    • Unit - Add ABL_CODE to TempUnit
    • Set VariableSet ABL = (Unit: TempUnit's Ability with Ability Code: ABL_CODE)
    • Set VariableSet LVL = (Level of (Ability being cast) for (Triggering unit))
    • Set VariableSet DMG = (BASE_DMG[LVL] + (AGI_SCALING[LVL] x (Real((Agility of (Triggering unit) (Include bonuses))))))
    • -------- --------
    • Ability - Set Ability: ABL's Real Level Field: Primary Damage ('Nab4') of Level: 0 to DMG
    • Ability - Set Ability: ABL's Real Level Field: Secondary Damage ('Nab5') of Level: 0 to DMG
    • Ability - Set Ability: ABL's Real Level Field: Duration - Hero ('ahdu') of Level: 0 to 0.10
    • Ability - Set Ability: ABL's Real Level Field: Duration - Normal ('adur') of Level: 0 to 0.10
    • Unit - Increase level of ABL_CODE for TempUnit //ABILITY MUST HAVE A SECOND LEVEL TO REFRESH FIELDS, EVEN IF YOU NEVER USE IT FOR ANYTHING
    • Unit - Decrease level of ABL_CODE for TempUnit
    • Unit - Order TempUnit to Neutral Alchemist - Acid Bomb (Target unit of ability being cast)
    • -------- --------
    • Set VariableSet DMG = (DMG / (DURATION / TICK_RATE))
    • Ability - Set Ability: ABL's Real Level Field: Primary Damage ('Nab4') of Level: 0 to DMG
    • Ability - Set Ability: ABL's Real Level Field: Secondary Damage ('Nab5') of Level: 0 to DMG
    • Ability - Set Ability: ABL's Real Level Field: Duration - Hero ('ahdu') of Level: 0 to DURATION
    • Ability - Set Ability: ABL's Real Level Field: Duration - Normal ('adur') of Level: 0 to DURATION
    • Unit - Increase level of ABL_CODE for TempUnit
    • Unit - Decrease level of ABL_CODE for TempUnit
    • Unit - Order TempUnit to Neutral Alchemist - Acid Bomb (Target unit of ability being cast)
Hmm seems very messed up. Can't you fix a spellpack map for it pls?
 
Level 45
Joined
Feb 27, 2007
Messages
5,578
Hmm seems very messed up. Can't you fix a spellpack map for it pls?
It's very much NOT messed up and is quite succinct compared to how it would be to trigger the buff, periodically tick damage, properly overwite instances, and detect projectile impact correctly. The reason I wrote what I wrote above is because it avoids a ton of the minutiae that is required to make triggered spells feel like native spells. If I thought it was better to code the whole effect I would have done it, but after enough years I've come to understand that there are inherent benefits to using native abilites whenever possible.

Most of that trigger is configuration to give you specific control over how the ability functions. If you'd chosen to read my trigger instead of immediately balk at it you would understand what is happening and how to apply it; Literally everything is setting variables for data except the dummy spawning and four lines used (twice) that set skill damage and duration.

Frankly, in my opinion AdaptiveTrigger is doing you a disservice by just throwing a map at you with no explanation or information. You've been on this site for 17 years, Dinodin; you should be capable of seeing a trigger and recreating it yourself with ease. That's a vital skill I'm certain you have exercised before. By understanding what I showed you can do with the field natives, you will understand how to dynamically change any base wc3 skill at-runtime to do exactly what you want whenever you want it. I won't rage any more and I'm not trying to disparage Adaptive's time and effort spent making that map for you; it just doesn't really help *any*one in the long term.

@AdaptiveTrigger You've combined the main two possible methods (change AB with field natives and dummy-cast them vs. fully trigger the whole skill) without really the benefits of either and are doing something very not-recommended by setting the base damage of AB to 1000000000 in the OE. You've apparently done that to make it easy to detect damage dealt by the AB ability's ticks specifically, but such a method only works for one thing at a time in a map. What if this same unit had a second skill whose damage you also needed to detect? What do you do then, since you can't pick a "big but not that big" number in between somewhere since the damage taken is modified by armor and any runed bracers abilities the map might be using.

In such a situation, the correct process is to dummy-cast the skill/effect whose damage you want to detect so that the main unit doesn't actually do any of the damage. Then in damage detection triggers you look specifically for the damage source being a dummy unit with a nonzero level of the relevant ability it would have cast. This does require your dummies to stick around throughout the cast duration but that shouldn't be an issue if they're properly designed since they can't be interacted with or seen (and we have expiration timers for automatic removal).

There's also another issue with your code: since you save the data about the cast in a hashtable that uses the caster's handle id as one key, and then load that same data for every active instance (when you loop through the groups), each unit will always take the same exact tick damage. If I cast the skill at level 1 with no items, then refresh the cooldown and pick up a bunch of agility items or level up the skill higher and cast it a second time simultaneously... the damage dealt to the units that were already hit and currently are ticking will change to match the second cast. Does it matter much? No. But it's an interaction that could be exploited, especially if the map has any time-limited agility buffs to account for. It's also not accurate to say that this skill simply doesn't snapshot stats on cast (like mine does), since that implies its damage will constantly be updated to match any changes to your agility or base damage, which isn't something your code actually does constantly (only when the skill is cast)

There's also a fair amount of of hardcoded stuff like 250.0 + ( 0.5 * agility * abilitylevel ) which I generally don't agree with since it's not easy for someone to understand how to change that if they want, say, the agilty scaling to be more complex. I'm not here to nitpick that.
 
Level 15
Joined
Jul 19, 2007
Messages
857
Here you go:
Thanks but it seems like the arrow isn't doing the damage it is supposed to do in my map... I have tested your spellpack map and it works perfectly in that but in my map it doesn't and I dunno why. Yes I have changed all raw codes required for the spell but still it doesn't do the damage it is supposed to do, it kills units instantly when they shouldn't be killed :eek:2
 

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,877
Here's a great system for custom missile effects:
It's a really clean system and GUI friendly. See the demo map I attached for just the core system + an example.
(I think Chopinski includes extra systems in his demo map which could be a little confusing for some users)

Then just take Pyro's Acid Bomb stuff and have the dummy cast the spell when the missile impacts it's target.
 

Attachments

  • Chopinski Missile Demo 1.w3m
    78.4 KB · Views: 2
Level 4
Joined
Jun 17, 2016
Messages
18
It's very much NOT messed up and is quite succinct compared to how it would be to trigger the buff, periodically tick damage, properly overwite instances, and detect projectile impact correctly. The reason I wrote what I wrote above is because it avoids a ton of the minutiae that is required to make triggered spells feel like native spells. If I thought it was better to code the whole effect I would have done it, but after enough years I've come to understand that there are inherent benefits to using native abilites whenever possible.

Most of that trigger is configuration to give you specific control over how the ability functions. If you'd chosen to read my trigger instead of immediately balk at it you would understand what is happening and how to apply it; Literally everything is setting variables for data except the dummy spawning and four lines used (twice) that set skill damage and duration.

Frankly, in my opinion AdaptiveTrigger is doing you a disservice by just throwing a map at you with no explanation or information. You've been on this site for 17 years, Dinodin; you should be capable of seeing a trigger and recreating it yourself with ease. That's a vital skill I'm certain you have exercised before. By understanding what I showed you can do with the field natives, you will understand how to dynamically change any base wc3 skill at-runtime to do exactly what you want whenever you want it. I won't rage any more and I'm not trying to disparage Adaptive's time and effort spent making that map for you; it just doesn't really help *any*one in the long term.

@AdaptiveTrigger You've combined the main two possible methods (change AB with field natives and dummy-cast them vs. fully trigger the whole skill) without really the benefits of either and are doing something very not-recommended by setting the base damage of AB to 1000000000 in the OE. You've apparently done that to make it easy to detect damage dealt by the AB ability's ticks specifically, but such a method only works for one thing at a time in a map. What if this same unit had a second skill whose damage you also needed to detect? What do you do then, since you can't pick a "big but not that big" number in between somewhere since the damage taken is modified by armor and any runed bracers abilities the map might be using.

In such a situation, the correct process is to dummy-cast the skill/effect whose damage you want to detect so that the main unit doesn't actually do any of the damage. Then in damage detection triggers you look specifically for the damage source being a dummy unit with a nonzero level of the relevant ability it would have cast. This does require your dummies to stick around throughout the cast duration but that shouldn't be an issue if they're properly designed since they can't be interacted with or seen (and we have expiration timers for automatic removal).

There's also another issue with your code: since you save the data about the cast in a hashtable that uses the caster's handle id as one key, and then load that same data for every active instance (when you loop through the groups), each unit will always take the same exact tick damage. If I cast the skill at level 1 with no items, then refresh the cooldown and pick up a bunch of agility items or level up the skill higher and cast it a second time simultaneously... the damage dealt to the units that were already hit and currently are ticking will change to match the second cast. Does it matter much? No. But it's an interaction that could be exploited, especially if the map has any time-limited agility buffs to account for. It's also not accurate to say that this skill simply doesn't snapshot stats on cast (like mine does), since that implies its damage will constantly be updated to match any changes to your agility or base damage, which isn't something your code actually does constantly (only when the skill is cast)

There's also a fair amount of of hardcoded stuff like 250.0 + ( 0.5 * agility * abilitylevel ) which I generally don't agree with since it's not easy for someone to understand how to change that if they want, say, the agilty scaling to be more complex. I'm not here to nitpick that.

- If another ability from the same unit needed to be detected, then just use another buff. It's hard to imagine a unit would need two DoT effects with special effects.

- If the ability is refreshed, then yes, the damage would be updated. I designed it like that specifically because the cooldown is intended to be set to 110/95/80 as outlined. Could be easy enough for me to adjust though, but probably difficult for him, admittedly.

- The ability is designed to only take a snapshot of the caster's stats on cast because that's how it normally works in Warcraft 3. If you hit a target with a level 1 Shadow Strike, then level it up to level 3 while they're receiving damage from it, the damage effect will still act as though Shadow Strike was level 1.

- He seemed to understand how to change the rawcodes, so I imagine he would know how to change the damage if he needed to.

- My experience with learning JASS decades ago was looking through code written by someone else before getting inspired to try myself, so he could potentially learn from that. But that's up to him.
 
Last edited:
Level 45
Joined
Feb 27, 2007
Messages
5,578
The ability is designed to only take a snapshot of the caster's stats on cast because that's how it normally works in Warcraft 3. If you hit a target with a level 1 Shadow Strike, then level it up to level 3 while they're receiving damage from it, the damage effect will still act as though Shadow Strike was level 1.
Your code doesn’t snapshot properly because of how you’re storing data in the hashtable: any simultaneous cast updates the damage ticking from the first. That’s what you’ll see I said above if you actually read my commentary.
If another ability from the same unit needed to be detected, then just use another buff.
The issue has nothing to do with a buff and is entirely because you’ve made this skill work by dealing excessive damage and looking for a really high damage number to determine when this skill does damage.

That method does not work with armor, runed bracers, other effects that change received damage like shields or % reduction/amplification, and cannot be used for more than one thing in a map because you can’t differentiate between two different sources dealing this excessive damage as a trigger.

Please read, man.
 
Level 4
Joined
Jun 17, 2016
Messages
18
Your code doesn’t snapshot properly because of how you’re storing data in the hashtable: any simultaneous cast updates the damage ticking from the first. That’s what you’ll see I said above if you actually read my commentary.

The issue has nothing to do with a buff and is entirely because you’ve made this skill work by dealing excessive damage and looking for a really high damage number to determine when this skill does damage.

That method does not work with armor, runed bracers, other effects that change received damage like shields or % reduction/amplification, and cannot be used for more than one thing in a map because you can’t differentiate between two different sources dealing this excessive damage as a trigger.

Please read, man.

I'm not trying to be confrontational here. Maybe we can try to dial this back a little.

I mentioned before that I coded everything based on the cooldown being 110/95/80 as noted in the original post. So, yes, if there's some ability or item that can refresh the ability's cooldown, it would cause problems with the "snapshot" being updated. I think we're actually in agreement there. If that was a factor, it wouldn't be too hard for me to accommodate for that, but something like that wasn't mentioned so I chose not to worry about it.

If that doesn't address what you're talking about with the snapshot or I'm still misunderstanding, then my apologies there. I've read your comment about 10 times now.

For the excessive amount of damage, I'll point out that the amount of damage that's being dealt is around 1,000,000,000 or maybe even more. But the amount of damage that will trigger the "initial damage" or "damage tick" is 100,000. Armor values won't affect spell damage and unless those Runed Bracers are set to have 99.99% spell resistance, the trigger will still fire off. It will still work even against Divine Armor.

And yes, using an excessive amount of damage can only really work for about one ability without other conditions — this is what I was talking about with regards to the "buff" part, but I explained that poorly so my apologies there. In my own map, I have multiple heroes that have abilities that uniquely need their own detection, which usually involves abilities using unique buffs that immediately get removed before they're noticed. Dummies can also work, but these two methods are not necessarily mutually exclusive.

Look, I just saw the request and thought it'd be fun to boot up the World Editor. The OP seems happy with how the ability turned out, but if there end up being any issues then I can address them should they come up. Assuming I'm understanding everything you're saying, I think I actually considered every potential issue you've brought up beforehand.
 
Last edited:

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,877
Gentleman, I present you my magnum opus of editing worlds.

I smoothed out all of the edge cases until this thing became spherical.

The only thing to worry about would be if the Unit Indexer recycled a dead caster's custom value while the damage over time was active (damage source is tied to this value). Easy fix though, go into the Unit Indexer and prevent heroes from recycling their custom values. This issue actually keeps me up at night... I've forgotten to account for this throughout the years while suggesting solutions to people. Oh well, it's a relatively rare and harmless bug. Oh and the buff is based on Slow, so something like Control Magic would be a little weird as it'd transfer the buff without bringing the damage over time component with it. It would dispel it properly, though.

Edit: Adjusted damage over time (35% -> 7% per sec)
 

Attachments

  • Dragons Fire Arrow 1.w3m
    89.6 KB · Views: 5
Last edited:
Level 45
Joined
Feb 27, 2007
Messages
5,578
I'm not trying to disparage Adaptive's time and effort spent making that map for you
Yes you understand my comments about snapshots correctly, and yes you are correct that as long as the cooldown is longer than the duration of the skill then what I am concerned with can never matter. There are numerous ways a skill like this might be modified for balance purposes or to achieve adjacent functionality it didn't originally include, and yeah it is folly to attempt to cover for too many of them (my method can never allow the damage over time to ramp up/down over the buff duration, for example). I use a barometer something like this so I don't have to go back and overhaul something I've already done:
  • If the change to the ability that would cause unintended behavior is making a single number or set of numbers too low/high, I am not content to let that slide and I will always account for it. In my opinion, the mapmaker should be able to change any configurable to basically anything else without it fundamentally breaking what the code does.
    • If this change would be totally illogical, like setting a negative number of points to choose or using a non-locusted dummy instead of a locusted one, I am content to ignore its implications.
  • The ability should always be able to be cast any number of times simultaneously without messing anything up, because I can never know what the user intends to do with it. Somewhere down the line maybe the OP here decides he wants this skill to be Faramir's main damaging attack and chooses not to give it a cooldown at all. What then?

  • If the ability at base interacts poorly with things like dispels or spell steal it may or may not be relevant in any given map, and I should do my best to make it behave logically with no ill effects or make explicitly clear it cannot be made to do so without herculean effort.

  • If the thing that has to happen to cause an issue with the ability depends on 3 or more specific choices/actions by the developer/players that must both happen in sequence or simultaneously (or just both be active/true), then I basically never care because that's far too niche to matter. Two things in the chain is questionable to address but usually can be ignored if you understand the context of the map (crucially we do not, here).
For your damage detection to go awry something else from the hero has to deal >100k damage (give or take armor/other reduction) to a target with the AB buff on it. In a universe where the map has massively inflated stats like many wc3 maps tend to do at 'endgame', it seems totally plausible to deal that much with a single attack or spell with attribute scaling, but since it also depends on a player hitting an AB'd unit yeah I guess that's okay to use and will be unlikely to have any false positives. I do understand your buff commentary now.
My experience with learning JASS decades ago was looking through code written by someone else before getting inspired to try myself, so he could potentially learn from that. But that's up to him.
Sure some people would, but the OP seems not to have looked at even a GUI trigger willingly. Comments would be helpful for that, but my code doesn't really have structural comments either (just warnings) so that's a ludicrous thing to criticize you for.
Assuming I'm understanding everything you're saying, I think I actually considered every potential issue you've brought up beforehand.
Yes, I agree that you have.

@Uncle Am I stupid? What edge cases are there even to consider with field natives + double-dummy-cast AB that using a missile system and an indexer can fix?
 
Last edited:

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,877
Am I stupid? What edge cases are there even to consider with field natives + double-dummy-cast AB that using a missile system and an indexer can fix?
I don't think you're stupid...

I was poking fun (and really just wanted an excuse to make some triggers). We both know it's impossible to avoid all of Warcraft 3's "quirks".

Anyway, the setup I have does avoid one thing that bothers me, which is kill credit -> Dummy units getting kills. These maps always have some kind of "On Kill" effects that won't work if the (Killing unit) is not set to the correct unit. Same goes for "On Hit" effects with damage events.
 
Top