• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

[GUI] Corpse Bomb 1.02

  • Like
Reactions: Ofel and Losam
Ability Info

Summon all corpses in the target area into a single corpse bomb that will float into the air and follow the caster when ready.

Use a second ability to order one of your corpse bombs to land in the target area, dealing damage based on the number of corpses in the bomb.

Triggers

  • CorpseBomb Config
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Set the main ability that will gather corpses --------
      • Set CorpseBombAbilityLaunch = Corpse Bomb
      • -------- Set the secondary ability that will launch a corpse bomb --------
      • Set CorpseBombAbilityTarget = Corpse Crash
      • -------- Set the unit type of the dummy unit --------
      • Set CorpseBombDummyType = Corpse Bomb
      • -------- -------------------------------------------- --------
      • -------- ABILITY STATS --------
      • -------- -------------------------------------------- --------
      • -------- Damage --------
      • Set CorpseBombDamageBase = 30.00
      • Set CorpseBombDamageUpgrade = 20.00
      • -------- Area of effect for damage --------
      • Set CorpseBombRadiusBase = 200.00
      • Set CorpseBombRadiusUpgrade = 50.00
      • -------- Gather radius for corpse pickup --------
      • Set CorpseBombPickRadiusBase = 200.00
      • Set CorpseBombPickRadiusUpgrade = 50.00
      • -------- Corpse Bomb limit per caster --------
      • Set CorpseBombLimitBase = 1
      • Set CorpseBombLimitUpgrade = 1
      • -------- Corpse bomb summon time --------
      • Set CorpseBombGatherTime = 2.50
      • -------- Projectile speed --------
      • Set CorpseBombProjectileSpeed = 25.00
      • -------- Follow speed --------
      • Set CorpseBombFollowSpeed = 7.00
      • -------- -------------------------------------------- --------
      • -------- AESTHETICS --------
      • -------- -------------------------------------------- --------
      • -------- Height range --------
      • Set CorpseBombHeightMin = 300.00
      • Set CorpseBombHeightMax = 400.00
      • -------- SFX in area on impact --------
      • Set CorpseBombAreaSFX = Objects\Spawnmodels\Orc\OrcLargeDeathExplode\OrcLargeDeathExplode.mdl

  • CorpseBomb Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
    • Actions
      • Set tempPlayer = (Triggering player)
      • Set tempUnitTrigger = (Triggering unit)
      • Set tempLoc1 = (Target point of ability being cast)
      • Set CorpseBombCasterId = (Custom value of tempUnitTrigger)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to CorpseBombAbilityLaunch
        • Then - Actions
          • -------- Create dummy at target location, make transparent --------
          • Unit - Create 1 CorpseBombDummyType for tempPlayer at tempLoc1 facing Default building facing degrees
          • Set CorpseBombInstanceUnit = (Last created unit)
          • Set CorpseBombInstanceId = (Custom value of CorpseBombInstanceUnit)
          • Set CorpseBombDummy[CorpseBombInstanceId] = CorpseBombInstanceUnit
          • Set CorpseBombCaster[CorpseBombInstanceId] = tempUnitTrigger
          • Unit Group - Add CorpseBombInstanceUnit to CorpseBombInstanceGroup
          • Set tempHeight = ((CorpseBombHeightMax + CorpseBombHeightMin) / 2.00)
          • Set tempSpeedZ = (tempHeight / CorpseBombGatherTime)
          • Animation - Change CorpseBombInstanceUnit flying height to tempHeight at tempSpeedZ
          • Set CorpseBombTime[CorpseBombInstanceId] = CorpseBombGatherTime
          • Set CorpseBombPhase[CorpseBombInstanceId] = 0
          • -------- ---------------------- --------
          • Set tempGroup = (Units within (CorpseBombPickRadiusBase + ((Real(((Level of CorpseBombAbilityLaunch for tempUnitTrigger) - 1))) x CorpseBombPickRadiusUpgrade)) of tempLoc1 matching (((((Matching unit) is alive) Equal to False) and (((Matching unit) is in CorpseBombOrbiterGro
          • Set CorpseBombAmount[CorpseBombInstanceId] = (Number of units in tempGroup)
          • Unit Group - Pick every unit in tempGroup and do (Actions)
            • Loop - Actions
              • Unit Group - Add (Picked unit) to CorpseBombOrbiterGroup
              • Unit Group - Add (Picked unit) to CorpseBombCorpseGroup[CorpseBombInstanceId]
              • Set tempHeight = (Random real number between CorpseBombHeightMin and CorpseBombHeightMax)
              • Set tempSpeedZ = (tempHeight / CorpseBombGatherTime)
              • Animation - Change (Picked unit) flying height to tempHeight at tempSpeedZ
          • Custom script: call DestroyGroup(udg_tempGroup)
          • -------- Turn on loop --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (CorpseBomb Loop <gen> is on) Equal to False
            • Then - Actions
              • Trigger - Turn on CorpseBomb Loop <gen>
            • Else - Actions
          • -------- SwitchAbility: --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • CorpseBombSwitchAbility Equal to True
            • Then - Actions
              • -------- Replace ability --------
              • Unit - Add CorpseBombAbilityTarget to tempUnitTrigger
              • Unit - Set level of CorpseBombAbilityTarget for tempUnitTrigger to (Level of CorpseBombAbilityLaunch for tempUnitTrigger)
              • Unit - Remove CorpseBombAbilityLaunch from tempUnitTrigger
            • Else - Actions
              • -------- Add secondary ability --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Level of CorpseBombAbilityTarget for tempUnitTrigger) Equal to 0
                • Then - Actions
                  • Unit - Add CorpseBombAbilityTarget to tempUnitTrigger
                • Else - Actions
              • Unit - Set level of CorpseBombAbilityTarget for tempUnitTrigger to (Level of CorpseBombAbilityLaunch for tempUnitTrigger)
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to CorpseBombAbilityTarget
        • Then - Actions
          • Set CorpseBombInstanceUnit = (Random unit from CorpseBombGroupByCaster[CorpseBombCasterId])
          • Set CorpseBombInstanceId = (Custom value of CorpseBombInstanceUnit)
          • Set CorpseBombPhase[CorpseBombInstanceId] = 1
          • Set CorpseBombTargetPoint[CorpseBombInstanceId] = (Target point of ability being cast)
          • Set tempHeight = ((CorpseBombHeightMax + CorpseBombHeightMin) / 2.00)
          • Set tempSpeedZ = (CorpseBombProjectileSpeed / tempHeight)
          • Animation - Change CorpseBombInstanceUnit flying height to 0.00 at 300.00
          • Unit Group - Remove CorpseBombInstanceUnit from CorpseBombGroupByCaster[CorpseBombCasterId]
          • -------- SwitchAbility: --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • CorpseBombSwitchAbility Equal to True
            • Then - Actions
              • -------- Replace ability --------
              • Unit - Add CorpseBombAbilityLaunch to tempUnitTrigger
              • Unit - Set level of CorpseBombAbilityLaunch for tempUnitTrigger to (Level of CorpseBombAbilityTarget for tempUnitTrigger)
              • Unit - Remove CorpseBombAbilityTarget from tempUnitTrigger
            • Else - Actions
        • Else - Actions
      • Custom script: call RemoveLocation(udg_tempLoc1)

  • CorpseBomb Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in CorpseBombInstanceGroup and do (Actions)
        • Loop - Actions
          • Set CorpseBombInstanceUnit = (Picked unit)
          • Set CorpseBombInstanceId = (Custom value of CorpseBombInstanceUnit)
          • Set CorpseBombCasterId = (Custom value of CorpseBombCaster[CorpseBombInstanceId])
          • -------- ------------------------------------------------------- --------
          • -------- PHASE 1: BOMB CREATION AND ORBIT --------
          • -------- ------------------------------------------------------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • CorpseBombPhase[CorpseBombInstanceId] Equal to 0
            • Then - Actions
              • -------- Move corpses into center of bomb --------
              • Set tempLoc2 = (Position of CorpseBombInstanceUnit)
              • Unit Group - Pick every unit in CorpseBombCorpseGroup[CorpseBombInstanceId] and do (Actions)
                • Loop - Actions
                  • Set tempUnit = (Picked unit)
                  • -------- Phase 1 - units rise and gather to dummy --------
                  • Set tempLoc1 = (Position of tempUnit)
                  • Set tempLoc3 = (tempLoc1 offset by (CorpseBombFollowSpeed x (Random real number between 1.10 and 2.00)) towards ((Angle from tempLoc1 to tempLoc2) + (Random real number between -60.00 and 100.00)) degrees)
                  • Unit - Move tempUnit instantly to tempLoc3, facing ((Facing of tempUnit) + (Random real number between 4.00 and 7.00)) degrees
                  • Custom script: call RemoveLocation(udg_tempLoc1)
                  • Custom script: call RemoveLocation(udg_tempLoc3)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • CorpseBombTime[CorpseBombInstanceId] Less than or equal to 1.00
                    • Then - Actions
                      • Animation - Change (Picked unit)'s size to ((CorpseBombTime[CorpseBombInstanceId] x 100.00)%, (CorpseBombTime[CorpseBombInstanceId] x 100.00)%, (CorpseBombTime[CorpseBombInstanceId] x 100.00)%) of its original size
                    • Else - Actions
              • Custom script: call RemoveLocation(udg_tempLoc2)
              • -------- ------------------------------------------------------- --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • CorpseBombTime[CorpseBombInstanceId] Greater than 0.00
                • Then - Actions
                  • Set CorpseBombTime[CorpseBombInstanceId] = (CorpseBombTime[CorpseBombInstanceId] - 0.03)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • CorpseBombTime[CorpseBombInstanceId] Less than or equal to 0.00
                    • Then - Actions
                      • -------- remove corpses --------
                      • Unit Group - Add CorpseBombInstanceUnit to CorpseBombGroupByCaster[(Custom value of CorpseBombCaster[CorpseBombInstanceId])]
                      • Unit Group - Pick every unit in CorpseBombCorpseGroup[CorpseBombInstanceId] and do (Actions)
                        • Loop - Actions
                          • Unit Group - Remove (Picked unit) from CorpseBombCorpseGroup[CorpseBombInstanceId]
                          • Unit - Remove (Picked unit) from the game
                    • Else - Actions
                • Else - Actions
                  • -------- Bomb follows caster --------
                  • Set tempLoc1 = (Position of CorpseBombInstanceUnit)
                  • Set tempLoc2 = (Position of CorpseBombCaster[CorpseBombInstanceId])
                  • Set tempLoc3 = (tempLoc2 offset by 250.00 towards (Angle from tempLoc2 to tempLoc1) degrees)
                  • Set tempLoc4 = (tempLoc1 offset by CorpseBombFollowSpeed towards (Angle from tempLoc1 to tempLoc3) degrees)
                  • Unit - Move CorpseBombInstanceUnit instantly to tempLoc4, facing ((Facing of CorpseBombInstanceUnit) + (Random real number between 4.00 and 7.00)) degrees
                  • Custom script: call RemoveLocation(udg_tempLoc4)
                  • Custom script: call RemoveLocation(udg_tempLoc1)
                  • Custom script: call RemoveLocation(udg_tempLoc2)
                  • Custom script: call RemoveLocation(udg_tempLoc3)
            • Else - Actions
          • -------- ------------------------------------------------------- --------
          • -------- PHASE 2: MOVE TO TARGET --------
          • -------- ------------------------------------------------------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • CorpseBombPhase[CorpseBombInstanceId] Equal to 1
            • Then - Actions
              • Set tempLoc1 = (Position of CorpseBombInstanceUnit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Distance between tempLoc1 and CorpseBombTargetPoint[CorpseBombInstanceId]) Less than or equal to 50.00
                • Then - Actions
                  • -------- ------------------------------------------------------- --------
                  • -------- BOMB REACHES TARGET --------
                  • -------- ------------------------------------------------------- --------
                  • Set tempDamage = (CorpseBombDamageBase + ((Real(((Level of CorpseBombAbilityLaunch for CorpseBombCaster[CorpseBombInstanceId]) - 1))) x CorpseBombDamageUpgrade))
                  • Set CorpseBombTempDamage = ((CorpseBombDamageBase + (CorpseBombDamageUpgrade x (Real(((Level of CorpseBombAbilityLaunch for CorpseBombCaster[CorpseBombInstanceId]) - 1))))) x (Real(CorpseBombAmount[CorpseBombInstanceId])))
                  • -------- Damage! --------
                  • Custom script: set bj_wantDestroyGroup = true
                  • Unit Group - Pick every unit in (Units within (CorpseBombRadiusBase + (CorpseBombRadiusUpgrade x (Real(((Level of CorpseBombAbilityLaunch for CorpseBombCaster[CorpseBombInstanceId]) - 1))))) of CorpseBombTargetPoint[CorpseBombInstanceId] matching ((((Matching unit) is dead) Equal to False) and do (Actions)
                    • Loop - Actions
                      • Unit - Cause CorpseBombCaster[CorpseBombInstanceId] to damage (Picked unit), dealing CorpseBombTempDamage damage of attack type Spells and damage type Normal
                  • -------- SFX! --------
                  • For each (Integer CorpseBombLoop) from 1 to CorpseBombAmount[CorpseBombInstanceId], do (Actions)
                    • Loop - Actions
                      • Set tempLoc2 = (CorpseBombTargetPoint[CorpseBombInstanceId] offset by (Random real number between 0.00 and (CorpseBombRadiusBase + ((Real(((Level of CorpseBombAbilityLaunch for CorpseBombCaster[CorpseBombInstanceId]) - 1))) x CorpseBombRadiusUpgrade))) towards (Random angle
                      • Special Effect - Create a special effect at tempLoc2 using CorpseBombAreaSFX
                      • Special Effect - Destroy (Last created special effect)
                      • Custom script: call RemoveLocation(udg_tempLoc1)
                  • Unit Group - Remove CorpseBombInstanceUnit from CorpseBombInstanceGroup
                  • Unit - Remove CorpseBombInstanceUnit from the game
                  • Set CorpseBombCaster[CorpseBombInstanceId] = No unit
                  • Set CorpseBombDummy[CorpseBombInstanceId] = No unit
                  • Set CorpseBombTime[CorpseBombInstanceId] = 0.00
                  • Set CorpseBombPhase[CorpseBombInstanceId] = 0
                  • Custom script: call RemoveLocation(udg_CorpseBombTargetPoint[udg_CorpseBombInstanceId])
                • Else - Actions
                  • -------- ------------------------------------------------------- --------
                  • -------- BOMB PROJECTILE MOVEMENT --------
                  • -------- ------------------------------------------------------- --------
                  • Set tempLoc3 = (tempLoc1 offset by CorpseBombProjectileSpeed towards (Angle from tempLoc1 to CorpseBombTargetPoint[CorpseBombInstanceId]) degrees)
                  • Unit - Move CorpseBombInstanceUnit instantly to tempLoc3, facing ((Facing of CorpseBombInstanceUnit) + (Random real number between 4.00 and 7.00)) degrees
                  • Custom script: call RemoveLocation(udg_tempLoc3)
              • Custom script: call RemoveLocation(udg_tempLoc1)
            • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (CorpseBombInstanceGroup is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

  • CorpseBomb Check
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
    • Actions
      • Set tempId = (Custom value of (Triggering unit))
      • Set tempPlayer = (Triggering player)
      • -------- Check the launch conditions --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to CorpseBombAbilityLaunch
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Number of units in CorpseBombGroupByCaster[tempId]) Less than (CorpseBombLimitBase + (((Level of CorpseBombAbilityLaunch for (Triggering unit)) - 1) x CorpseBombLimitUpgrade))
            • Then - Actions
              • Set tempUnitTrigger = (Triggering unit)
              • Set tempLoc1 = (Target point of ability being cast)
              • Set tempGroup = (Units within (CorpseBombPickRadiusBase + ((Real(((Level of CorpseBombAbilityLaunch for tempUnitTrigger) - 1))) x CorpseBombPickRadiusUpgrade)) of tempLoc1 matching (((((Matching unit) is alive) Equal to False) and (((Matching unit) is in CorpseBombOrbiterGro
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (tempGroup is empty) Equal to True
                • Then - Actions
                  • Set tempForce = (Player group(tempPlayer))
                  • Game - Display to tempForce the text: |cffffcc00No corpse...
                  • Custom script: call DestroyForce(udg_tempForce)
                  • Unit - Order (Triggering unit) to Stop
                • Else - Actions
              • Custom script: call DestroyGroup(udg_tempGroup)
              • Custom script: call RemoveLocation(udg_tempLoc1)
            • Else - Actions
              • Set tempForce = (Player group(tempPlayer))
              • Game - Display to tempForce the text: |cffffcc00Limit rea...
              • Custom script: call DestroyForce(udg_tempForce)
              • Unit - Order (Triggering unit) to Stop
        • Else - Actions
      • -------- Check the target conditions --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to CorpseBombAbilityTarget
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (CorpseBombGroupByCaster[(Custom value of (Triggering unit))] is empty) Equal to True
            • Then - Actions
              • Unit - Order (Triggering unit) to Stop
              • Set tempForce = (Player group(tempPlayer))
              • Game - Display to tempForce the text: |cffffcc00No Corpse...
              • Custom script: call DestroyForce(udg_tempForce)
            • Else - Actions
        • Else - Actions
      • -------- Turn on cast trigger --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (CorpseBomb Cast <gen> is on) Equal to False
        • Then - Actions
          • Trigger - Turn on CorpseBomb Cast <gen>
          • Trigger - Turn on CorpseBomb PreventRaise <gen>
        • Else - Actions

  • CorpseBomb CasterDies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Not equal to CorpseBombDummyType
    • Actions
      • Unit Group - Pick every unit in CorpseBombInstanceGroup and do (Actions)
        • Loop - Actions
          • Set tempId = (Custom value of (Picked unit))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • CorpseBombCaster[tempId] Equal to (Triggering unit)
            • Then - Actions
              • Set tempUnit = (Picked unit)
              • Unit Group - Pick every unit in CorpseBombCorpseGroup[CorpseBombInstanceId] and do (Actions)
                • Loop - Actions
                  • Unit Group - Remove (Picked unit) from CorpseBombCorpseGroup[CorpseBombInstanceId]
                  • Unit - Remove (Picked unit) from the game
              • Unit Group - Remove tempUnit from CorpseBombInstanceGroup
              • Unit - Remove tempUnit from the game
              • Set CorpseBombCaster[tempId] = No unit
              • Set CorpseBombDummy[tempId] = No unit
              • Set CorpseBombTime[tempId] = 0.00
              • Set CorpseBombPhase[tempId] = 0
            • Else - Actions
  • CorpseBomb PreventRaise
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
      • ((Target unit of ability being cast) is in CorpseBombOrbiterGroup) Equal to True
    • Actions
      • Unit - Order (Triggering unit) to Stop


Changelog
1.02
  • Fixed corpses being affected by spells like Raise Dead
  • Corpses are now removed when the bomb has been created, thanks Frotty for the model

Credits
Bribe - Unit Indexer
Matheridon96 - Autofly
Frotty - Corpse Bomb missile model

Keywords:
corpse bomb, corpse, bomb, floating bomb, blood explosion
Contents

Corpse Bomb 1.02 (Map)

Reviews
Approved. Suggested changes: Do this only after you remove a unit from the group, not 33x per secondIf (All Conditions are True) then do (Then Actions) else do (Else Actions) If - Conditions (CorpseBombInstanceGroup is empty) Equal...

Moderator

M

Moderator

Reviewed by Maker, GUI Corpse Bomb 1.02, 5th Jan 2013

Approved.

Suggested changes:
  • Do this only after you remove a unit from the group, not 33x per second
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • (CorpseBombInstanceGroup is empty) Equal to True
      • Then - Actions
        • Trigger - Turn off (This trigger)
      • Else - Actions
  • CorpseBomb Cast should not set variables for every spell that is cast
  • Removing an ability from a unit causes the ability to not have cooldown
  • The throw bomb icon's position doesn't match the pick up ability's position
 
Really too many triggers for just one spell, really should have 3 (1 for config, one for cast, one for loop) and a very short one for dummy removal (if applicable) If you want to make checks to potentially cancel the spell, you can make it activate on "Starts casting an ability" then input the instance into the loop, then recheck using an artifical wait that they're still casting the ability and then cause the effects to happen which you want when the effect *actually* starts (note to scan beforehand to make sure each unit can only have one instance) and do it that way. Also the game messages can be spammed by just constantly hitting the spell's cast key and then pressing stop (or not)

Also shouldn't use custom value's (this is to account for system collision)

Just wanted to note that
 
Level 25
Joined
Jul 10, 2006
Messages
3,315
Really too many triggers for just one spell, really should have 3 (1 for config, one for cast, one for loop) and a very short one for dummy removal (if applicable) If you want to make checks to potentially cancel the spell, you can make it activate on "Starts casting an ability" then input the instance into the loop, then recheck using an artifical wait that they're still casting the ability and then cause the effects to happen which you want when the effect *actually* starts (note to scan beforehand to make sure each unit can only have one instance) and do it that way. Also the game messages can be spammed by just constantly hitting the spell's cast key and then pressing stop (or not)

Also shouldn't use custom value's (this is to account for system collision)

Just wanted to note that

Thanks for the feedback.

On using "begins casting": I've never tried that method; I'll attempt and see how it goes.

On game message spam: the alternative is to clear text messages on the screen, which might clear useful game-related information. Unless there's another method?

On custom values: I'm using unit indexer for the caster and instance index, and custom values only for the units that are part of the "ball", the custom value being the same as their instance (custom value of the main dummy unit).

No comment on the spell itself? :/
 
You could use a timer for a sort of "cooldown" on the message for each player, so that it cannot come up more than once every x seconds, or use a counter so every 2-3 times they try to cause a failed use it'll give the message, something like that, the latter would be the fastest and most efficient but the x seconds would be most practical from an in-game perspective.

I'm aware of how it's being used, it's just better to index them with your own variables to avoid some global custom value-based system which would alter theirs for whatever reason (just for safety) though sometimes you can get away with it.

Well as far as the spell itself:

Co-ordinates would be better than locations (for moving units, fine for creating them) especially true in high numbers as it causes lag
Programming sections of the spells rather than using any form of object editor spells (other than the initial cast dummy spell) is better because less to import/remember and much easier to modify
Units need caching in your triggers
  • Set tempId = (Custom value of (Picked unit))
When this activates when -any- unit dies, this is a particular reason why custom value is a bad idea, because that means if -any- system influences the custom value of this dying unit, you may have problems

more or less it for the skim-over

the spell idea itself has been done (in similar ways but typically not exactly) a few times, so it's nothing new, but I suppose it's useful, but highly situational since it requires units to be dead already for it to do anything at all
 
Level 25
Joined
Jul 10, 2006
Messages
3,315
You could use a timer for a sort of "cooldown" on the message for each player, so that it cannot come up more than once every x seconds, or use a counter so every 2-3 times they try to cause a failed use it'll give the message, something like that, the latter would be the fastest and most efficient but the x seconds would be most practical from an in-game perspective.

Will do.

I'm aware of how it's being used, it's just better to index them with your own variables to avoid some global custom value-based system which would alter theirs for whatever reason (just for safety) though sometimes you can get away with it.

The main reason I do this is because the alternative was to put them in a unit group array indexed by the main dummy's id, but unit group arrays have that nasty requirement that you have to specify the array size which causes half of all importing problems.

Co-ordinates would be better than locations (for moving units, fine for creating them) especially true in high numbers as it causes lag
Programming sections of the spells rather than using any form of object editor spells (other than the initial cast dummy spell) is better because less to import/remember and much easier to modify
Units need caching in your triggers
  • Set tempId = (Custom value of (Picked unit))
When this activates when -any- unit dies, this is a particular reason why custom value is a bad idea, because that means if -any- system influences the custom value of this dying unit, you may have problems

Will do. Ideally I should use a model for the corpse bomb... time to visit the requests forum I suppose.

the spell idea itself has been done (in similar ways but typically not exactly) a few times, so it's nothing new, but I suppose it's useful, but highly situational since it requires units to be dead already for it to do anything at all

Nothing original under the sun :(

Thanks again for your feedback.
 

TKF

TKF

Level 19
Joined
Nov 29, 2006
Messages
1,266
If you use "Starts casting an ability" you can press stop after the casting has begun and the cooldown and mana cost will not be triggered.

But using "Starts casting an ability" is good for stopping a unit if you want a desired target you don't want to use the spell on for a certain condition.
 
Rulerofiron99 said:
The main reason I do this is because the alternative was to put them in a unit group array indexed by the main dummy's id, but unit group arrays have that nasty requirement that you have to specify the array size which causes half of all importing problems.

You could just use a unit array instead and array each dummy unit into the array and index it like you would anything else - that's what I do with my things
 
Level 6
Joined
Apr 15, 2012
Messages
205
It's a really great spell, but I found some bugs.

- If you pick up corpses and then skill the ability up one level, you can pick
up corpses again. If you do that, the previous corpse bomb can't be thrown at the ground, but it will still hover.

- If the caster dies, the corpse bomb will still hover above the ground.


EDIT: Sorry, the first problem was fixed by configuring some of the options you provided. The other problem can be fixed by reviving the unit.

I have a request, can you make so that instead of that the unit selects where to pick up the corpses, can it just be an ability that you activate and it will pick upp all corpses in X radius of the hero?
 
Level 1
Joined
Jun 17, 2013
Messages
2
I imported the spell into my map, but there is one problem: Corpses are standing in mid air until they disappear.
 
Level 24
Joined
Feb 9, 2009
Messages
1,783

I imported the spell into my map, but there is one problem: Corpses are standing in mid air until they disappear.
Now it's not working at all. Someone help me please!

I'm having this problem as well.

Removing the Tempgroup in the initial cast and directly adding the units to the group seems to do the trick but then the Missile doesn't get added to the group which allows it to fire, causing it to spam "No corpse bomb" when trying to launch...
 
Top