Spell Spiritual Pinball

Cloak_Master

Active Member
Reaction score
41
Spiritual Pinball
I honestly felt that the screenshot completely failed to do the ability justice. Before judging, I'd recommend trying it out in game, as I'm quite aware that my fail art sense makes it's function look ambiguous.

Description: The ability is a fairly accurate repersentation of it's name. The caster will transform into an ephemeral pinball that bounces from nearby enemy to nearby enemy, damaging them as it goes. The amount of enemies it bounces to is entirely customizable.

This spell is entirely GUI and MPI. It is now also fully MUI.

Trigger 1:
Code:
Spiritual Pinball
    Events
        Unit - A unit Starts the effect of an ability
    Conditions
        (Ability being cast) Equal to Spiritual Pinball 
    Actions
        Set MultiValue = (MultiValue + 1)
        Set Heroes[MultiValue] = (Casting unit)
        Set Point[1] = (Position of (Casting unit))
        Set TrashGroup = (Units within 800.00 of Point[1] matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) belongs to an enemy of (Owner of (Casting unit))) Equal to True) and ((((Matching unit) is in PinballTargetGroup[MultiValue]) Not equal to True) and (
        -------- The + 4 is used to set the default amount of hits + the level of pinball for the casting unit. You can change this to anything to increase or decrease targets. --------
        For each (Integer A) from 1 to ((Level of Spiritual Pinball  for Heroes[MultiValue]) + 4), do (Actions)
            Loop - Actions
                Unit Group - Add (Random unit from TrashGroup) to PinballTargetGroup[MultiValue]
                Set TrashGroup = (Units within 800.00 of Point[1] matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) belongs to an enemy of (Owner of (Casting unit))) Equal to True) and ((((Matching unit) is in PinballTargetGroup[MultiValue]) Not equal to True) and (
        Unit - Order (Casting unit) to Stop
        Unit - Hide (Casting unit)
        Unit - Create 1 Pinball for (Owner of (Casting unit)) at Point[1] facing Default building facing degrees
        Unit - Set the custom value of (Last created unit) to MultiValue
        Animation - Change (Last created unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with 50.00% transparency
        Special Effect - Create a special effect at Point[1] using Abilities\Spells\NightElf\Blink\BlinkTarget.mdl
        Special Effect - Destroy (Last created special effect)
        Set PinballTarget[MultiValue] = (Random unit from PinballTargetGroup[MultiValue])
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                (Number of units in PinballTargetGroup[MultiValue]) Equal to 0
            Then - Actions
                Set PinballTarget[MultiValue] = Heroes[MultiValue]
            Else - Actions
        Custom script:   call RemoveLocation (udg_Point[1])
        Custom script:   call DestroyGroup (udg_TrashGroup)
Trigger 2:
Code:
Pinball Slide
    Events
        Time - Every 0.03 seconds of game time
    Conditions
        (Number of units in (Units of type Pinball)) Greater than 0
    Actions
        Set TrashGroup = (Units of type Pinball)
        Unit Group - Pick every unit in TrashGroup and do (Actions)
            Loop - Actions
                Set Point[1] = (Position of (Picked unit))
                Set Point[2] = (Position of PinballTarget[(Custom value of (Picked unit))])
                Set Point[3] = (Point[1] offset by 35.00 towards (Angle from Point[1] to Point[2]) degrees)
                Unit - Move (Picked unit) instantly to Point[3]
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Distance between Point[1] and Point[2]) Less than or equal to 90.00
                    Then - Actions
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                PinballTarget[(Custom value of (Picked unit))] Equal to Heroes[(Custom value of (Picked unit))]
                            Then - Actions
                                Special Effect - Create a special effect at Point[2] using Abilities\Spells\NightElf\Blink\BlinkTarget.mdl
                                Special Effect - Destroy (Last created special effect)
                                Unit - Unhide Heroes[(Custom value of (Picked unit))]
                                Selection - Add Heroes[(Custom value of (Picked unit))] to selection for (Owner of (Picked unit))
                                Unit - Remove (Picked unit) from the game
                                Skip remaining actions
                            Else - Actions
                        Special Effect - Create a special effect at Point[2] using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
                        Special Effect - Destroy (Last created special effect)
                        Special Effect - Create a special effect at Point[2] using Abilities\Spells\Other\Stampede\StampedeMissileDeath.mdl
                        Special Effect - Destroy (Last created special effect)
                        -------- 500 is an arbitrary value, set that to the damage you want the spell to cause. You could also make it incremental, and deal Level of Pinball for Heroes[custom value of picked unit] times X. --------
                        Unit - Cause (Picked unit) to damage PinballTarget[(Custom value of (Picked unit))], dealing 500.00 damage of attack type Spells and damage type Normal
                        Unit Group - Remove PinballTarget[(Custom value of (Picked unit))] from PinballTargetGroup[(Custom value of (Picked unit))]
                        Set PinballTarget[(Custom value of (Picked unit))] = (Random unit from PinballTargetGroup[(Custom value of (Picked unit))])
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Number of units in PinballTargetGroup[(Custom value of (Picked unit))]) Equal to 0
                            Then - Actions
                                Set PinballTarget[(Custom value of (Picked unit))] = Heroes[(Custom value of (Picked unit))]
                            Else - Actions
                                Do nothing
                    Else - Actions
                Custom script:   call RemoveLocation (udg_Point[1])
                Custom script:   call RemoveLocation (udg_Point[2])
                Custom script:   call RemoveLocation (udg_Point[3])
        Custom script:   call DestroyGroup (udg_TrashGroup)
 

Attachments

  • SpiritualPinballv2.w3x
    30.4 KB · Views: 238

XeNiM666

I lurk for pizza
Reaction score
138
Nice spell,
but change all the (Casting unit) to (Triggering Unit), its more MUI.
also dont use the ( Set TrashGroup = (Units of Type Pinball) )
do this instead:
Code:
       Unit - Create 1 Pinball for (Owner of (Casting unit)) at Point[1] facing Default building facing degrees
        Unit Group - Add (Last created unit) to TrashGroup2
also, use 2 different unit group variables, it may crash your spell
 

Cloak_Master

Active Member
Reaction score
41
Thanks for the input, glad you liked it.

I will take your advice into consideration, but so far I've yet to see any problems with crashing or the use of casting unit. Perhaps I haven't done enough testing. I'll check it out later today and see what happens.

Thanks again :>

Getting tons of views here but few downloads, I think the screenshot is just terrible. It's impossible to capture this spell in a screenshot, though, really - so judgment there is inaccurate :(
 

lindenkron

You can change this now in User CP
Reaction score
102
Cool idea :D. Little note: When the spell is over, order the owner of the unit to select the hero again. Just for easyer use in maps :)
 

trb92

Throwing science at the wall to see what sticks
Reaction score
142
Just quickly looking through the code, saw this.
Code:
Unit - Move (Picked unit) instantly to [B](Point[1] offset by 35.00 towards (Angle from Point[1] to Point[2])[/B]
That leaks, need to store the polar offset into another point and remove it.

Other then that, code looks good. Unable to view in game at the moment as the comp I'm on doesn't have wc3.
 

Cloak_Master

Active Member
Reaction score
41
Thanks for the input, people. Didn't notice that leak >.<

Anyways, I've changed the way the code works a bit. It's now completely MUI, multiple heroes per player can use it at the same time.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top