1. Are you planning to upload your awesome spell or system to Hive? Please review the rules here.
    Dismiss Notice
  2. Updated Resource Submission Rules: All model & skin resource submissions must now include an in-game screenshot. This is to help speed up the moderation process and to show how the model and/or texture looks like from the in-game camera.
    Dismiss Notice
  3. DID YOU KNOW - That you can unlock new rank icons by posting on the forums or winning contests? Click here to customize your rank or read our User Rank Policy to see a list of ranks that you can unlock. Have you won a contest and still haven't received your rank award? Then please contact the administration.
    Dismiss Notice
  4. Lead your forces to battle in the 15th Techtree Contest. The call is yours, commander!
    Dismiss Notice
  5. The reforging of the races is complete. Come see the 14th Techtree Contest Results.
    Dismiss Notice
  6. It's time to choose your horse in the race - the 32nd Modeling Contest Poll is up!
    Dismiss Notice
  7. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

Meteor Strike v2.01

Submitted by KILLCIDE
This bundle is marked as approved. It works and satisfies the submission rules.
  • [​IMG]
  • [​IMG] Meteor Strike
    Calls a meteor from the sky to pummel the targeted area.
    When the meteor hits the ground, it will dealing damage to
    nearby enemy units and roll for a set distance. As it rolls, it
    will deal damage per second and knock back enemy units
    that are in its path. If the meteor rolls the full distance or
    runs into a structure or terrain, it will explode; dealing
    damage and stunning enemy units.​

  • MS Config
    • MS Config
      • Events
        • Map initialization
      • Conditions
      • Actions
        • -------- !! CONFIG START !! --------
        • -------- Abilities and Dummies --------
        • Set MS_Ability = Meteor Strike
        • -------- Stun Ability --------
        • -------- NOTE: If you want to edit the stun duration and or damage of the meteor death, refer to this ability --------
        • Set MS_AbilityStun = Meteor Strike (Stun)
        • Set MS_Dummy = Dummy
        • -------- --------
        • -------- Max Level MS_Ability Will Have --------
        • -------- NOTE: THIS IS REALLY IMPORTANT IF YOU WANT DAMAGE & ROLL EFFECTS TO WORK PROPERLY --------
        • Set MS_MaxLevel = 3
        • -------- --------
        • -------- Damage When Meteor Lands --------
        • Set MS_LandingDamage = 100.00
        • -------- Radius to Deal LandingDamage --------
        • Set MS_LandAoE = 200.00
        • -------- --------
        • -------- Damage Per Second Per Level --------
        • Set MS_Damage[1] = 125.00
        • Set MS_Damage[2] = 150.00
        • Set MS_Damage[3] = 200.00
        • -------- Radius to Deal Damage --------
        • -------- NOTE: Make sure to match the Area of Effect values in MS_Ability --------
        • Set MS_AoE = 175.00
        • -------- --------
        • -------- Roll Distance Per Level --------
        • Set MS_RollDistance[1] = 500.00
        • Set MS_RollDistance[2] = 650.00
        • Set MS_RollDistance[3] = 750.00
        • -------- Roll Length Per Level --------
        • Set MS_RollTime[1] = 2.25
        • Set MS_RollTime[2] = 2.75
        • Set MS_RollTime[3] = 3.25
        • -------- --------
        • -------- Radius to Stun When Meteor Ends --------
        • Set MS_StunAoE = 250.00
        • -------- --------
        • -------- Meteor Spawn Location --------
        • Set MS_M_SpawnHeight = 1100.00
        • Set MS_M_SpawnDistance = 600.00
        • Set MS_FallTime = 1.75
        • -------- --------
        • -------- Should the Meteor Kill Trees? --------
        • Set MS_DestroyTrees = True
        • -------- Radius To Kill Trees --------
        • Set MS_DestroyTreeAoE = 150.00
        • -------- --------
        • -------- Knockback Stuff --------
        • Set MS_KBDistance = 150.00
        • Set MS_KBAoE = 132.00
        • Set MS_KBTime = 1.50
        • Set MS_SFXKB = Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
        • -------- --------
        • -------- Special Effect for Meteor --------
        • Set MS_SFXMeteor = Abilities\Weapons\BallsOfFireMissile\BallsOfFireMissile.mdl
        • Set MS_Size = 5.00
        • -------- Vertex Color of Meteor --------
        • -------- NOTE: Max value for each is 100 --------
        • Set MS_Red = 100.00
        • Set MS_Green = 0.00
        • Set MS_Blue = 0.00
        • -------- --------
        • -------- Special Effect for Falling --------
        • Set MS_SFXFall = Abilities\Weapons\BrewmasterMissile\BrewmasterMissile.mdl
        • -------- Frequency for SFXFall --------
        • Set MS_SFX_FallFreq = 0.15
        • -------- --------
        • -------- Special Effect for Landing --------
        • Set MS_SFXLand = Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
        • -------- --------
        • -------- Special Effect for Roll --------
        • Set MS_SFXRoll = Objects\Spawnmodels\Other\NeutralBuildingExplosion\NeutralBuildingExplosion.mdl
        • -------- Frequency for SFXRoll Per Level --------
        • Set MS_SFX_RollFreq[1] = 0.85
        • Set MS_SFX_RollFreq[2] = 0.80
        • Set MS_SFX_RollFreq[3] = 0.70
        • -------- --------
        • -------- Special Effect for Meteor Death --------
        • Set MS_SFXDeath = Abilities\Weapons\DemolisherFireMissile\DemolisherFireMissile.mdl
        • -------- --------
        • -------- Other Damage Configurables --------
        • Set MS_AttackType = Spells
        • Set MS_DamageType = Normal
        • -------- !! CONFIG END !! --------
        • -------- --------
        • Set MS_PeriodicTimer = 0.03
        • Trigger - Add to MS Loop <gen> the event (Time - Every MS_PeriodicTimer seconds of game time)
        • Set MS_TempLoc = (Center of (Playable map area))
        • Unit - Create 1 MS_Dummy for Neutral Passive at MS_TempLoc facing Default building facing degrees
        • Set MS_DummyCaster = (Last created unit)
        • Unit - Add MS_AbilityStun to MS_DummyCaster
        • Custom script: call UnitRemoveAbility(udg_MS_DummyCaster, 'Amov')
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • MS_DestroyTrees Equal to True
          • Then - Actions
            • Unit - Create 1 Peasant for Neutral Passive at MS_TempLoc facing Default building facing degrees
            • Set MS_TreeKiller = (Last created unit)
            • Unit - Hide MS_TreeKiller
            • Unit - Make MS_TreeKiller Invulnerable
            • Custom script: call UnitAddAbility(udg_MS_TreeKiller, 'Ahrl')
          • Else - Actions
            • -------- user does not want to kill trees --------
        • Custom script: call RemoveLocation(udg_MS_TempLoc)
        • Set MS_MeteorSize = (100.00 x MS_Size)
        • Set MS_FallRate_XY = (MS_M_SpawnDistance / (MS_FallTime / MS_PeriodicTimer))
        • Set MS_FallRate_Z = (MS_M_SpawnHeight / (MS_FallTime / MS_PeriodicTimer))
        • For each (Integer MS_TempInt) from 1 to MS_MaxLevel, do (Actions)
          • Loop - Actions
            • Set MS_Damage[MS_TempInt] = (MS_Damage[MS_TempInt] x MS_PeriodicTimer)
            • Set MS_MoveRate[MS_TempInt] = (MS_RollDistance[MS_TempInt] / (MS_RollTime[MS_TempInt] / MS_PeriodicTimer))

    MS Cast
    • MS Cast
      • Events
        • Unit - A unit Starts the effect of an ability
      • Conditions
        • (Ability being cast) Equal to MS_Ability
      • Actions
        • Set MS_SpellCount = (MS_SpellCount + 1)
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • MS_SpellCount Equal to 1
          • Then - Actions
            • Trigger - Turn on MS Loop <gen>
          • Else - Actions
            • -------- loop is already on; do nothing --------
        • -------- --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
          • Then - Actions
            • Set MS_MaxIndex = (MS_MaxIndex + 1)
            • Set MS_Spell_ID = MS_MaxIndex
          • Else - Actions
            • Set MS_RecycledSize = (MS_RecycledSize - 1)
            • Set MS_Spell_ID = MS_RecycledStack[MS_RecycledSize]
        • Set MS_NodeNext[MS_Spell_ID] = 0
        • Set MS_NodeNext[MS_NodePrev[0]] = MS_Spell_ID
        • Set MS_NodePrev[MS_Spell_ID] = MS_NodePrev[0]
        • Set MS_NodePrev[0] = MS_Spell_ID
        • -------- --------
        • Set MS_Caster[MS_Spell_ID] = (Triggering unit)
        • Set MS_AbilityLvl[MS_Spell_ID] = (Level of MS_Ability for MS_Caster[MS_Spell_ID])
        • Set MS_Owner[MS_Spell_ID] = (Triggering player)
        • Set MS_TargetLoc[MS_Spell_ID] = (Target point of ability being cast)
        • Set MS_DistanceTraveled[MS_Spell_ID] = 0.00
        • Set MS_Counter_SFX[MS_Spell_ID] = 0.00
        • Set MS_Stage[MS_Spell_ID] = 1
        • -------- --------
        • Set MS_TempLoc = (Position of MS_Caster[MS_Spell_ID])
        • Set MS_RollDirection[MS_Spell_ID] = (Angle from MS_TempLoc to MS_TargetLoc[MS_Spell_ID])
        • Set MS_TempReal = (MS_RollDirection[MS_Spell_ID] + 180.00)
        • Set MS_MeteorLoc = (MS_TargetLoc[MS_Spell_ID] offset by MS_M_SpawnDistance towards MS_TempReal degrees)
        • -------- --------
        • Unit - Create 1 MS_Dummy for MS_Owner[MS_Spell_ID] at MS_MeteorLoc facing MS_RollDirection[MS_Spell_ID] degrees
        • Set MS_MeteorDummy[MS_Spell_ID] = (Last created unit)
        • Animation - Change MS_MeteorDummy[MS_Spell_ID] flying height to MS_M_SpawnHeight at 0.00
        • Animation - Change MS_MeteorDummy[MS_Spell_ID]'s size to (MS_MeteorSize%, MS_MeteorSize%, MS_MeteorSize%) of its original size
        • Animation - Change MS_MeteorDummy[MS_Spell_ID]'s vertex coloring to (MS_Red%, MS_Green%, MS_Blue%) with 0.00% transparency
        • Special Effect - Create a special effect attached to the origin of MS_MeteorDummy[MS_Spell_ID] using MS_SFXMeteor
        • Set MS_Meteor_SFX[MS_Spell_ID] = (Last created special effect)
        • -------- --------
        • Custom script: call RemoveLocation(udg_MS_TempLoc)
        • Custom script: call RemoveLocation(udg_MS_MeteorLoc)


    MS Loop
    • MS Loop
      • Events
      • Conditions
      • Actions
        • Set MS_Spell_ID = 0
        • For each (Integer MS_LoopInt) from 1 to MS_SpellCount, do (Actions)
          • Loop - Actions
            • Set MS_Spell_ID = MS_NodeNext[MS_Spell_ID]
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • MS_Stage[MS_Spell_ID] Equal to 1
              • Then - Actions
                • Set MS_Counter_SFX[MS_Spell_ID] = (MS_Counter_SFX[MS_Spell_ID] + MS_PeriodicTimer)
                • -------- --------
                • -------- XY adjustment --------
                • Set MS_TempLoc = (Position of MS_MeteorDummy[MS_Spell_ID])
                • Set MS_MeteorLoc = (MS_TempLoc offset by MS_FallRate_XY towards MS_RollDirection[MS_Spell_ID] degrees)
                • -------- Z adjustment --------
                • Set MS_TempHeight = (Current flying height of MS_MeteorDummy[MS_Spell_ID])
                • Set MS_CurrentHeight = (MS_TempHeight - MS_FallRate_Z)
                • -------- apply adjustment --------
                • Unit - Move MS_MeteorDummy[MS_Spell_ID] instantly to MS_MeteorLoc
                • Animation - Change MS_MeteorDummy[MS_Spell_ID] flying height to MS_CurrentHeight at 0.00
                • Set MS_DistanceTraveled[MS_Spell_ID] = (MS_DistanceTraveled[MS_Spell_ID] + MS_FallRate_XY)
                • -------- --------
                • -------- checking if it is time to show SFXFall --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • MS_Counter_SFX[MS_Spell_ID] Greater than or equal to MS_SFX_FallFreq
                  • Then - Actions
                    • Set MS_Counter_SFX[MS_Spell_ID] = 0.00
                    • Unit - Create 1 MS_Dummy for MS_Owner[MS_Spell_ID] at MS_MeteorLoc facing Default building facing degrees
                    • Set MS_TempUnit = (Last created unit)
                    • Unit - Add a 1.00 second Generic expiration timer to MS_TempUnit
                    • Animation - Change MS_TempUnit flying height to (MS_TempHeight - 100.00) at 0.00
                    • Special Effect - Create a special effect attached to the origin of MS_TempUnit using MS_SFXFall
                    • Special Effect - Destroy (Last created special effect)
                  • Else - Actions
                    • -------- it is not time to show SFXFall; do nothing --------
                • -------- checking if meteor has reached ground height --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • MS_DistanceTraveled[MS_Spell_ID] Greater than or equal to MS_M_SpawnDistance
                  • Then - Actions
                    • Special Effect - Create a special effect at MS_MeteorLoc using MS_SFXLand
                    • Special Effect - Destroy (Last created special effect)
                    • Special Effect - Create a special effect at MS_MeteorLoc using MS_SFXRoll
                    • Special Effect - Destroy (Last created special effect)
                    • -------- dealing damage to units around landing area --------
                    • Custom script: set bj_wantDestroyGroup = true
                    • Unit Group - Pick every unit in (Units within MS_LandAoE of MS_TargetLoc[MS_Spell_ID]) and do (Actions)
                      • Loop - Actions
                        • Set MS_TempUnit = (Picked unit)
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (MS_TempUnit belongs to an enemy of MS_Owner[MS_Spell_ID]) Equal to True
                            • (MS_TempUnit is alive) Equal to True
                            • (MS_TempUnit is Magic Immune) Equal to False
                          • Then - Actions
                            • Unit - Cause MS_Caster[MS_Spell_ID] to damage MS_TempUnit, dealing MS_LandingDamage damage of attack type MS_AttackType and damage type MS_DamageType
                          • Else - Actions
                            • -------- TempUnit did not pass filters; do not deal damage --------
                    • Set MS_Counter_SFX[MS_Spell_ID] = 0.00
                    • Set MS_DistanceTraveled[MS_Spell_ID] = 0.00
                    • Set MS_Stage[MS_Spell_ID] = 2
                    • Custom script: call RemoveLocation(udg_MS_TargetLoc[udg_MS_Spell_ID])
                  • Else - Actions
                    • -------- meteor is still falling; do not start roll phase --------
                • Custom script: call RemoveLocation(udg_MS_TempLoc)
                • Custom script: call RemoveLocation(udg_MS_MeteorLoc)
              • Else - Actions
                • -------- XY adjustment --------
                • Set MS_MeteorLoc = (Position of MS_MeteorDummy[MS_Spell_ID])
                • Set CP_Point = (MS_MeteorLoc offset by MS_MoveRate[MS_AbilityLvl[MS_Spell_ID]] towards MS_RollDirection[MS_Spell_ID] degrees)
                • Set MS_DistanceTraveled[MS_Spell_ID] = (MS_DistanceTraveled[MS_Spell_ID] + MS_MoveRate[MS_AbilityLvl[MS_Spell_ID]])
                • -------- --------
                • -------- checking if user wants to destroy trees --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • MS_DestroyTrees Equal to True
                  • Then - Actions
                    • Destructible - Pick every destructible within MS_DestroyTreeAoE of CP_Point and do (Actions)
                      • Loop - Actions
                        • Set MS_TempDest = (Picked destructible)
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (MS_TempDest is alive) Equal to True
                          • Then - Actions
                            • Unit - Order MS_TreeKiller to Harvest MS_TempDest
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • (Current order of MS_TreeKiller) Equal to (Order(harvest))
                              • Then - Actions
                                • Destructible - Kill MS_TempDest
                              • Else - Actions
                                • -------- TempDest is not a tree; do not kill --------
                          • Else - Actions
                            • -------- TempDest is already dead --------
                        • Unit - Order MS_TreeKiller to Stop
                  • Else - Actions
                    • -------- user does not want to kill trees --------
                • -------- checking if path ahead is pathable for meteor --------
                • Trigger - Run Check Walkability <gen> (ignoring conditions)
                • -------- checking if meteor has not hit terrain or still has distance to roll --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • Or - Any (Conditions) are true
                      • Conditions
                        • CP_PointIsWalkable Equal to False
                        • MS_DistanceTraveled[MS_Spell_ID] Greater than or equal to MS_RollDistance[MS_AbilityLvl[MS_Spell_ID]]
                  • Then - Actions
                    • Special Effect - Destroy MS_Meteor_SFX[MS_Spell_ID]
                    • Unit - Remove MS_MeteorDummy[MS_Spell_ID] from the game
                    • Special Effect - Create a special effect at CP_Point using MS_SFXRoll
                    • Special Effect - Destroy (Last created special effect)
                    • Special Effect - Create a special effect at CP_Point using MS_SFXDeath
                    • Special Effect - Destroy (Last created special effect)
                    • -------- --------
                    • Unit - Change ownership of MS_DummyCaster to MS_Owner[MS_Spell_ID] and Change color
                    • Unit - Set level of MS_AbilityStun for MS_DummyCaster to MS_AbilityLvl[MS_Spell_ID]
                    • -------- stunning enemy units and damaging structures --------
                    • Custom script: set bj_wantDestroyGroup = true
                    • Unit Group - Pick every unit in (Units within MS_StunAoE of CP_Point) and do (Actions)
                      • Loop - Actions
                        • Set MS_TempUnit = (Picked unit)
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (MS_TempUnit is Magic Immune) Equal to False
                            • (MS_TempUnit is alive) Equal to True
                            • (MS_TempUnit belongs to an enemy of MS_Owner[MS_Spell_ID]) Equal to True
                          • Then - Actions
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • (MS_TempUnit is A structure) Equal to False
                              • Then - Actions
                                • Set MS_TempLoc = (Position of MS_TempUnit)
                                • Unit - Move MS_DummyCaster instantly to MS_TempLoc
                                • Unit - Order MS_DummyCaster to Human Mountain King - Storm Bolt MS_TempUnit
                                • Custom script: call RemoveLocation(udg_MS_TempLoc)
                              • Else - Actions
                                • Unit - Cause MS_Caster[MS_Spell_ID] to damage MS_TempUnit, dealing MS_Damage[MS_AbilityLvl[MS_Spell_ID]] damage of attack type MS_AttackType and damage type MS_DamageType
                          • Else - Actions
                            • -------- TempUnit did not pass filters; do not stun --------
                    • -------- --------
                    • Set MS_RecycledStack[MS_RecycledSize] = MS_Spell_ID
                    • Set MS_RecycledSize = (MS_RecycledSize + 1)
                    • Set MS_NodeNext[MS_NodePrev[MS_Spell_ID]] = MS_NodeNext[MS_Spell_ID]
                    • Set MS_NodePrev[MS_NodeNext[MS_Spell_ID]] = MS_NodePrev[MS_Spell_ID]
                    • -------- --------
                    • Set MS_SpellCount = (MS_SpellCount - 1)
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • MS_SpellCount Equal to 0
                      • Then - Actions
                        • Trigger - Turn off MS Loop <gen>
                      • Else - Actions
                        • -------- there is a spell instance still running; do not turn off loop --------
                  • Else - Actions
                    • Set MS_Counter_SFX[MS_Spell_ID] = (MS_Counter_SFX[MS_Spell_ID] + MS_PeriodicTimer)
                    • Unit - Move MS_MeteorDummy[MS_Spell_ID] instantly to CP_Point
                    • -------- --------
                    • -------- dealing damage per second and applying knockback --------
                    • Custom script: set bj_wantDestroyGroup = true
                    • Unit Group - Pick every unit in (Units within MS_AoE of CP_Point) and do (Actions)
                      • Loop - Actions
                        • Set MS_TempUnit = (Picked unit)
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (MS_TempUnit is A flying unit) Equal to False
                            • (MS_TempUnit is Magic Immune) Equal to False
                            • (MS_TempUnit is alive) Equal to True
                            • (MS_TempUnit belongs to an enemy of MS_Owner[MS_Spell_ID]) Equal to True
                          • Then - Actions
                            • Unit - Cause MS_Caster[MS_Spell_ID] to damage MS_TempUnit, dealing MS_Damage[MS_AbilityLvl[MS_Spell_ID]] damage of attack type MS_AttackType and damage type MS_DamageType
                          • Else - Actions
                            • -------- TempUnit did not pass filters; do not deal damage --------
                    • Custom script: set bj_wantDestroyGroup = true
                    • Unit Group - Pick every unit in (Units within MS_KBAoE of CP_Point) and do (Actions)
                      • Loop - Actions
                        • Set MS_TempUnit = (Picked unit)
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (MS_TempUnit is A structure) Equal to False
                            • (MS_TempUnit is A flying unit) Equal to False
                            • (MS_TempUnit is alive) Equal to True
                            • (MS_TempUnit belongs to an enemy of MS_Owner[MS_Spell_ID]) Equal to True
                          • Then - Actions
                            • Set MS_TempLoc = (Position of MS_TempUnit)
                            • Set Knockback2DAngle = (Angle from MS_MeteorLoc to MS_TempLoc)
                            • Set Knockback2DTime = MS_KBTime
                            • Set Knockback2DDistance = MS_KBDistance
                            • Set Knockback2DUnit = MS_TempUnit
                            • Set Knockback2DLoopFX = MS_SFXKB
                            • Set Knockback2DPause = True
                            • Custom script: call RemoveLocation(udg_MS_TempLoc)
                            • Trigger - Run Knockback 2D <gen> (checking conditions)
                          • Else - Actions
                            • -------- TempUnit did not pass filters; do not knockback --------
                    • -------- --------
                    • -------- checking if it is time to show SFXRoll --------
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • MS_Counter_SFX[MS_Spell_ID] Greater than or equal to MS_SFX_RollFreq[MS_AbilityLvl[MS_Spell_ID]]
                      • Then - Actions
                        • Set MS_Counter_SFX[MS_Spell_ID] = 0.00
                        • Special Effect - Create a special effect at CP_Point using MS_SFXRoll
                        • Special Effect - Destroy (Last created special effect)
                      • Else - Actions
                        • -------- it is not time to show SFXRoll; do nothing --------
                • Custom script: call RemoveLocation(udg_CP_Point)
                • Custom script: call RemoveLocation(udg_MS_MeteorLoc)
    1. Under Preferences, make sure you have "Automatically create
      unknown variables while pasting trigger data" checked

    2. Import dummy.mdx, then copy and paste the dummy unit and
      two custom abilities into your map
      NOTE: If you already have dummy.mdx imported into
      your map, you DO NOT have to reimport it
      If you already have a global dummy unit in your map, you can
      skip this step

    3. Copy and paste the Resources folder into your map
      NOTE: If you already have a resource in the Resources
      folder imported into your map, you DO NOT have to reimport it

    4. Copy and paste the Meteor Strike folder into your map

    5. Go to the MS Config trigger, and change the Ability,
      AbilityStun, & Dummy variables to the corresponding objects
      you just imported
  • User

    Bribe - GUI Knockback 2D & GUI Unit Indexer

    PurgeandFire - Check Walkability

    Vexorian - dummy.mdx

  • [tdalt]

    [tab=Changelog]
    v2.01 (March 22, 2016)
    • Added an optional Meteor Strike folder that is integrated with GUI Spell System
    • Added Bribe's new knockback system update
    • Fixed bug of meteor falling at a completely different location when casted directly on top of the caster
    • Removed unnecesary NodeLast[] variable for linked list; last spell instance now stores into NodePrev[0]
    • Removed If/Then/Else that would set NodeLast = NodePrev[Spell_ID] if NodeLast == Spell_ID

    Previous Verisions

    v2.00 (January 25, 2016)
    • Added a filter for air units (both knockback and damage)
    • Changed data structure to linked listing

    v1.03 (December 05, 2015)
    • Changed spell to now use one global dummy caster instead of one dummy caster per spell instance
    • Changed meteorAngle to now be indexed with spell instance
    • Removed a lot of unnecessary calculations for fallRate and moveRate (now done in init)

    v1.02 (December 03, 2015)
    • Added multi-level support for rolling travel time & SFXRoll frequency
    • Changed MS Init trigger name to MS Cast
    • Fixed player[] variable to now use Triggering Player instead of Owner of (Unit)
    • Fixed a small bug where dummies for SFXFall were not being removed (thank you Legal_Ease)
    • Fixed Create a Unit functions to now reference MS_Dummy instead of actual dummy unit-type (thank you Legal_Ease)
    • Fixed self-made tree destroy system to be much safer by adding harvest ability to the created treeKiller
    • Removed damage[] variable so that calculations are now done on map init instead of on cast
    • Removed unnecessary function call when turning off MS Loop (Turn off (This trigger) -> (Turn off MS_Loop))

    v1.01 (December 02, 2015)
    • Added Bribe's new knockback system update
    • Added a landing damage mechanic
    • Removed damage interval mechanic; spell now deals damage constantly as it rolls

    v1.00 (December 01, 2015)
    • Uploaded
    [/TAB][/tdalt]
[tdalt]

Keywords:
meteor, strike, red, orange, fire, knockback, explode, explosion, stun, roll, rolling, boulder, rock, target, ground, linked, listing, gui, mui, killc[/tdalt]
Contents

Meteor Strike v2.01 (Map)

Reviews
Moderator
16:48, 18th Dec 2015 http://www.hiveworkshop.com/forums/spells-569/meteor-strike-v1-03-a-273139/index2.html#post2764648 http://www.hiveworkshop.com/forums/spells-569/meteor-strike-v1-03-a-273139/index2.html#post2767868 Rating: 3.5 -> 4
  1. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,502
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    Was in an extreme rush to get this uploaded ;_; I aplogize for any small mistakes you see. The spell, however, is fully functional!
     
  2. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,382
    Resources:
    22
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    4
    JASS:
    3
    Resources:
    22
    I can see a slope ;).
     
  3. oh, invoker inspired? very nice :)
     
  4. T77df

    T77df

    Joined:
    Sep 15, 2015
    Messages:
    196
    Resources:
    0
    Resources:
    0
    Wow.

    I love DotA Spells man. Good 5/5
     
  5. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,502
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    I told you I wasn't trolling! ;D

    Thank's guys, but I tried my best to not make it similar to Chaos Meteor xD my effects are better!
     
    Last edited: Dec 2, 2015
  6. ssbbssc2

    ssbbssc2

    Joined:
    Aug 20, 2015
    Messages:
    109
    Resources:
    0
    Resources:
    0
    nice looking spell. but sometimes units got knock-backed but didnt take any damage (or if u aim above units head)
    there isnt any initial damage from falling also, and i was thinking about some periodic fire damage
     
  7. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,502
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    That's because the knockback AoE is different from the damage AoE xP you can play around with the config variables. I can add initial fall damage later on maybe. You might want to make the Damage AoE slightly bigger than the knockback since the knockback will likely push them away from the damage AoE :p

    EDIT: I also forgot to mention that the damage is dealt EVERY 1 second, it doesn't deal damage with the periodic loop.
     
    Last edited: Dec 1, 2015
  8. San

    San

    Joined:
    Sep 23, 2012
    Messages:
    1,246
    Resources:
    64
    Icons:
    64
    Resources:
    64
    This is awesome!
     
  9. ILH

    ILH

    Joined:
    May 8, 2012
    Messages:
    606
    Resources:
    16
    Models:
    14
    Icons:
    1
    Tutorials:
    1
    Resources:
    16
    This ain't original, but still nice and well triggered <3
     
  10. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,502
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    Thank you!

    What do you mean D: this is the only spell of its kind on the Hive! Unless you're referring to the "Chaos Meteor" from DotA? That spell doesn't have a knockback nor does it have an "explode" feature :) my effects are also 500x cooler. Look at that smoke!
     
  11. Legal_Ease

    Legal_Ease

    Joined:
    Feb 8, 2013
    Messages:
    1,454
    Resources:
    28
    Icons:
    11
    Packs:
    1
    Skins:
    2
    Maps:
    10
    Template:
    1
    Tutorials:
    3
    Resources:
    28
    This is the best rolling boulder spell short of the commercial version in DotA2. Definitely the best on the Hive! 5/5 +rep

    EDIT:

    This should really read, "Import dummy model, then copy and paste Custom Abilities into your map, and then copy and paste dummy units."

    That way the dummy unit will have a model and abilities, before you import it. Otherwise, it will have an ability "Unknown," and you will have to reset those too. However, I do like your import instructions they are easier to read than some, and the spell itself is easy to import which is really great.
     
    Last edited: Dec 2, 2015
  12. Eagle XI

    Eagle XI

    Joined:
    Mar 9, 2012
    Messages:
    1,359
    Resources:
    117
    Models:
    2
    Icons:
    109
    Packs:
    4
    Skins:
    2
    Resources:
    117
    Expected to see it finally explode and split into multiple shrapnels upon reaching the end whilst watching the .gif

    However that isnt really necessary, probably more balanced as it is and cool enough. :thumbs_up:
     
  13. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,502
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    Check out the new update! I added the initial fall damage and also made the damage flow smoother with the knockback.

    Thank you for the SFX suggestions! It definitely made this spell look way better.

    Ohh trust me, I had soo many ideas for this spell. However, to keep it from being complicated and OP like you said, I had to hold back ;_;
     
  14. Legal_Ease

    Legal_Ease

    Joined:
    Feb 8, 2013
    Messages:
    1,454
    Resources:
    28
    Icons:
    11
    Packs:
    1
    Skins:
    2
    Maps:
    10
    Template:
    1
    Tutorials:
    3
    Resources:
    28
    You use this line in MS_Init
    • Unit - Create 1 Dummy for MS_player[MS_indexMax] at MS_dummyLoc facing MS_tempAngle degrees


    Which is fine, but you have a variable (udg_MS_Dummy) set in MS_config. Why not use it? When I imported it changed it on me. Now, normally this would be fine, but you are so good at setting everything in variables usually your spells don't do this to me and import perfectly.

    If you changed it already, just disregard this message.
     
  15. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,502
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    I pseudo-coded the spell before making all the configurables :) I must have forgotten to change it when I made the variable for the dummy. Thank you for the find!

    There were 3 Unit - Create 1 Dummy errors in the triggers o: one when when I preload the dummy, 1 for the meteorSFX, and 1 for SFXFall. Make sure you fixed all 3 if you don't feel like downloading the new one.
     
  16. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,382
    Resources:
    22
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    4
    JASS:
    3
    Resources:
    22
    • The structure of the loop should look like this:
      Pseude code:
      Code (Text):
      If (DeIndexCondtion == False) then
      ----
      ---- Then
      ----
      ---- ---- Do Actions 1
      ---- ---- Do Actions 2
      ----
      ---- Else
      ----
      ---- ---- Deindex
      Endif
      The condition for deindexing is the first check that has to be done.
      If it's time to deindex, then it has to be done immediatly,
      and no further instance operations should be done or checked.
      Use a KillTree system or adjust it correctly.
      Trusting on default unit only is not best method.
      Or look at what they do with harvester and do the same.
    • A reminder for you.
      GUI variables should be written "LikeThis", not "likeThis".
    • The per second calculations can be done once onInit after the config.
      Then there is no need to re-calculate it each time onCast.
      Btw, something like "MS Cast" trigger would fit more instead of "MS Init".^^
    • In cast trigger, "Set Player[index] = TriggeringPlayer" , instead of "OwnerOfUnit(Unit)". Slightly faster:).
      • Trigger - Turn off (This trigger)
      ->
      • Trigger - Turn off MS Loop <gen>
      (This Trigger) is a function call. Always these brackets (), does mean a function is called.
    • Is there a reason why you make instances for duration but not for time? (on init)
      Just curious.
    The spell looks good. :)
     
  17. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,502
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    Thank you. I will work on adjusting it to this structure.


    Working on it :)


    Already talked to you about it in chat :) however, I just wanted to clarify that the reason I write my variables like so is because I want to seperate my config variables from the variables used in the Init and Loop.


    Will work on this! Thank you. Will changing it to MS Cast help me get a 5/5 rating? (;


    Got it! I will have to do this for all my spells as well.


    I guess I can make this small change xD faster is better!


    Im sorry I am a little confused with this question D: do you mind elaborating?

    EDIT: Thank you for clarifying. Will add multi-level support.


    Thanks :) I also thank you for taking the time to teach me about the slopes.


    EDIT: Changes have been made.
     
    Last edited: Dec 4, 2015
  18. Quilnez

    Quilnez

    Joined:
    Oct 12, 2011
    Messages:
    3,295
    Resources:
    37
    Icons:
    2
    Tools:
    1
    Maps:
    7
    Spells:
    21
    Tutorials:
    2
    JASS:
    4
    Resources:
    37
    - Only use 1 stunner dummy unit for the whole game. And I think it's better to stun when the meteor hits the ground instead of when it's destroyed, it just makes more sense.
    - The angle is static, so store it in a real array variable for every instance. And eventually MS_moveRate is also static I think.
    - Then to determine traveled distance, use distance=distance+movespeed on every tick, instead of getting the distance from loc a to b all the time. If distance>targetdistance then destroy (spell ends).
    - Commonly 2 location variables are enough for a spell. To achieve this you need to use a location array variable for every instance which stores location where the spell is casted, let's name it CastPoint. Then the second one is a temporary location variable (current position of meteor): CastPoint[index] offset by CurrentDistance[index] towards Angle[index].