• 🏆 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] Amethyster Spellpack v1.2

  • Like
Reactions: Map Designer
210564-albums5645-picture58828.png



Spell Pack Features
  • GUI
  • MUI
  • Leakless
  • Variables' Prefixes
  • Very Easy to customize and manipulate

Notes
- If you take ANYTHING from this map please tell me, and give me credits: "KnnO"
- The models and triggers are all by me. Enjoy!
- The information you need to copy the spells to your map is inside the map triggers, but not simple as dis description.
- The spellpack uses two imported models I made to fit with the spells, they take (20.0kb)
- I chose those colours because they fit with faerie dragon, deal with it

Change log
  • Uploaded the spell.
  • v1.1 Removed forgotten stuff in the triggers, added screenshots in description.
  • v1.2 Changed Power 2 function to manual multiply, improved less usage of locations.

Spells


The yellow stuff can be configured.

SpellDescription
viewpost.gif
Vivacious twistAmethyster launches his decisive twister of magic to freeze the target's life for some time, deal damage and revive it 4 times in an interval
Lvl1: 30 DMG 0.25 freeze 0.3 interval
Lvl2: 40 DMG 0.40 freeze 0.2 interval
Lvl3: 50 DMG 0.55 freeze 0.1 interval
Lvl4: 60 DMG 0.70 freeze 0.0 interval
Interval is when to start the next freeze buff|r

Manacost: 110
Cooldown: 20

[tr]
[TD]
viewpost.gif
[/TD]
[TD]Bewitched drizzles[/TD]
[td]With a magical usage of mana, Amethyster throws a bewitched ball dealing damage when it touches the ground by spraying an AoE, and it bounces twice.
Lvl1: 50 DMG, 225 AoE
Lvl2: 100 DMG, 250 AoE
Lvl3: 150 DMG, 275 AoE
Lvl4: 200 DMG, 300 AoE

Manacost: 200/205/210/215
Cooldown: 30/28/26/24[/td]
[/tr]




210564-albums5645-picture58829.png


210564-albums5645-picture58866.png



First of all if you need a dummy caster unit copy the <Dummy Caster> unit from my map.
In the main world editor window, (select from the menu > File > Preferences > General) and check (Automatically create unknown variables).

To copy the spell, do the following in order:
  1. Copy <Vivacious twist> buff and <Vivacious twist (stunned)> buff to your map.
  2. Copy <Vivacious twist> ability and <Vivacious twist (Dummy)> ability to your map.
  3. Goto <Vivacious twist (Dummy)> ability in your map and fix the <Vivacious twist (stunned)> buff if it is not selected.
  4. Create a <Viv_Integer> integer variable in your map in the same case.
  5. Goto Import manager, export <Amethystun.mdx> model and import it to your map with the same path
    (and that's if you want the same special effect, otherwise change it in <Vivacious twist Init> trigger)
  6. Select the <Spell 1 - Vivavious twist> category and copy it to your map.
  7. Goto <Vivacious twist Init> trigger in your map and fix the values to be like this:
    • Actions
      • Set Viv_cAbility = Vivacious twist
      • Set Viv_cBuff = Vivacious twist
      • Set Viv_cAbilityDummy = Vivacious twist (Dummy)
      • Set Viv_cCasterDummy = Dummy Caster
  8. You can copy the hero and re-add the ability to him, then you are ready to go!

NOTES:
  • I used a special model for the buff by importing a model, you can take it but if you don't want it, be sure to change the ability projectile too.


Goto to the <Vivacious twist Init> trigger, and change the following to what you want:

VariableDescription
Viv_cAbility:
The ability that causes the spell triggers to fire
Viv_cBuff:
A variable to refer to a the spell buff
Viv_cSpecialEffect:
The special effect that is created above the unit and the unit is stunned
(I recommend to keep using my imported model because it fits)
Viv_cCasterDummy:
Your dummy caster unit, you can refer to it, or copy my dummy caster unit, both will work
Viv_cAbilityDummy:
A dummy ability for the dummy caster to use to stun enemies
Viv_cTwistCount:
How many times to do the spell
Viv_cDamage[<level>]
Viv_cInterval[<level>]

These variables control the spell properties



210564-albums5645-picture58827.png


210564-albums5645-picture58865.png



First of all if you need a dummy caster unit copy the <Dummy Caster> unit from my map.
In the main world editor window, (select from the menu > File > Preferences > General) and check (Automatically create unknown variables).

To copy the spell, do the following in order:
  1. Copy the <Bewitched drizzles> ability to your map.
  2. Copy the <Amethyster ball> unit to your map.
  3. Create a <Drz_Integer> integer variable in your map in the same case.
  4. Goto Import manager, export <FaerieHit.mdx> model and import it to your map with the same path
    (If you want the same special effect, otherwise change it in <Bewitched drizzles Init> trigger)
  5. Select the <Spell 2 - Bewitched drizzles> category and copy it to your map.
  6. Goto <Bewitched drizzles Init> trigger in your map and fix the values to be like this:
    • Actions
      • Set Drz_cAbility = Bewitched drizzles
      • Set Drz_cUnitDummy = Amethyster ball
  7. You can copy the hero and re-add the ability to him, then you are ready to go!

NOTES:
  • The ability casting range does not affect the ball traveling range.
  • once again I used a special model for the bouncing effect by importing a model, you can use it.


Goto to the <Bewitched drizzles Init> trigger, and change the following to what you want:

VariableDescription
Drz_cAbility:
The ability that causes the spell triggers to fire
Drz_cUnitDummy:
The ball dummy unit, it does nothing.
Drz_cRange:
Range the ball can travel, doesn't have anything to do with casting range
Drz_cSpeed:
A speed factor that changes the ball speed to travel (1 = 1 sec, 2 = 0.5s)
Drz_cStartingHeight:
Your hero's flying height to throw the ball from (cannot be on ground)
Drz_cNextJumpHeight:
The max height from ground the ball reaches when it bounces off
Drz_cSpecialEffect:
Special effect to create when the ball bounces (e.g. stomp) - (I imported a model for this effect, and the variable is using it)
Drz_Aoe[<level>]
Drz_Damage[<level>]:

These variables control the spell properties
[tr]


210564-albums5645-picture58830.png



210564-albums5645-picture58829.png


  • Vivacious twist Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Viv_cAbility
    • Actions
      • Set Viv_Count = (Viv_Count + 1)
      • Set Viv_Tw[Viv_Count] = Viv_cTwistCount
      • Set Viv_Unit[((2 x Viv_Count) - 1)] = (Triggering unit)
      • Set Viv_Unit[(2 x Viv_Count)] = (Target unit of ability being cast)
      • Set Viv_L[Viv_Count] = (Level of Viv_cAbility for Viv_Unit[((2 x Viv_Count) - 1)])
      • Set Viv_Case[Viv_Count] = 0
      • Set Viv_Timer[Viv_Count] = 0.00
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Viv_Count Equal to 1
        • Then - Actions
          • Trigger - Turn on Vivacious twist Loop <gen>
        • Else - Actions
  • Vivacious twist Loop
    • Events
      • Time - Every 0.05 seconds of game time
    • Conditions
    • Actions
      • For each (Integer Viv_Integer) from 1 to Viv_Count, do (Actions)
        • Loop - Actions
          • Set Viv_Timer[Viv_Integer] = (Viv_Timer[Viv_Integer] + 0.05)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Viv_Case[Viv_Integer] Equal to 0
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Viv_Unit[Viv_Integer] is Magic Immune) Equal to False
                  • (Viv_Unit[Viv_Integer] has buff Invulnerable) Equal to False
                • Then - Actions
                • Else - Actions
                  • Set Viv_Unit[((2 x Viv_Integer) - 1)] = Viv_Unit[((2 x Viv_Count) - 1)]
                  • Set Viv_Unit[(2 x Viv_Integer)] = Viv_Unit[(2 x Viv_Count)]
                  • Set Viv_Case[Viv_Integer] = Viv_Case[Viv_Count]
                  • Set Viv_Timer[Viv_Integer] = Viv_Timer[Viv_Count]
                  • Set Viv_Tw[Viv_Integer] = Viv_Tw[Viv_Count]
                  • Set Viv_L[Viv_Integer] = Viv_L[Viv_Count]
                  • Special Effect - Destroy Viv_SpecialEffect[Viv_Integer]
                  • Set Viv_SpecialEffect[Viv_Integer] = Viv_SpecialEffect[Viv_Count]
                  • Set Viv_Integer = (Viv_Integer - 1)
                  • Set Viv_Count = (Viv_Count - 1)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Viv_Count Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
                  • Skip remaining actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Viv_Unit[(2 x Viv_Integer)] has buff Viv_cBuff) Equal to True
                • Then - Actions
                  • Unit - Remove Vivacious twist buff from Viv_Unit[(2 x Viv_Integer)]
                  • Special Effect - Create a special effect attached to the overhead of Viv_Unit[(2 x Viv_Integer)] using Viv_cSpecialEffect
                  • Set Viv_SpecialEffect[Viv_Integer] = (Last created special effect)
                  • Set Viv_Case[Viv_Integer] = 1
                  • Set Viv_Timer[Viv_Integer] = 0.00
                • Else - Actions
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Viv_Case[Viv_Integer] Equal to 1
                • Then - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Viv_Timer[Viv_Integer] Greater than or equal to 1.00
                    • Then - Actions
                      • Set Viv_Timer[Viv_Integer] = 0.00
                      • Special Effect - Destroy Viv_SpecialEffect[Viv_Integer]
                      • Unit - Cause Viv_Unit[((2 x Viv_Integer) - 1)] to damage Viv_Unit[(2 x Viv_Integer)], dealing Viv_cDamage[Viv_L[Viv_Integer]] damage of attack type Magic and damage type Normal
                      • Set Viv_Point = (Position of Viv_Unit[(2 x Viv_Integer)])
                      • Unit - Create 1 Viv_cCasterDummy for (Owner of Viv_Unit[((2 x Viv_Integer) - 1)]) at Viv_Point facing 0.00 degrees
                      • Set Viv_tmpUnit = (Last created unit)
                      • Unit - Add Viv_cAbilityDummy to Viv_tmpUnit
                      • Unit - Add a 1.00 second Generic expiration timer to Viv_tmpUnit
                      • Unit - Order Viv_tmpUnit to Neutral - Hurl Boulder Viv_Unit[(2 x Viv_Integer)]
                      • Custom script: call RemoveLocation(udg_Viv_Point)
                      • Set Viv_Case[Viv_Integer] = 2
                    • Else - Actions
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Viv_Case[Viv_Integer] Equal to 2
                    • Then - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Viv_Timer[Viv_Integer] Greater than or equal to Viv_cInterval[Viv_L[Viv_Integer]]
                        • Then - Actions
                          • Set Viv_Tw[Viv_Integer] = (Viv_Tw[Viv_Integer] - 1)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • Viv_Tw[Viv_Integer] Equal to 0
                            • Then - Actions
                              • Set Viv_Unit[((2 x Viv_Integer) - 1)] = Viv_Unit[((2 x Viv_Count) - 1)]
                              • Set Viv_Unit[(2 x Viv_Integer)] = Viv_Unit[(2 x Viv_Count)]
                              • Set Viv_Case[Viv_Integer] = Viv_Case[Viv_Count]
                              • Set Viv_Timer[Viv_Integer] = Viv_Timer[Viv_Count]
                              • Set Viv_Tw[Viv_Integer] = Viv_Tw[Viv_Count]
                              • Set Viv_L[Viv_Integer] = Viv_L[Viv_Count]
                              • Special Effect - Destroy Viv_SpecialEffect[Viv_Integer]
                              • Set Viv_SpecialEffect[Viv_Integer] = Viv_SpecialEffect[Viv_Count]
                              • Set Viv_Integer = (Viv_Integer - 1)
                              • Set Viv_Count = (Viv_Count - 1)
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • Viv_Count Equal to 0
                                • Then - Actions
                                  • Trigger - Turn off (This trigger)
                                • Else - Actions
                              • Skip remaining actions
                            • Else - Actions
                              • Special Effect - Create a special effect attached to the overhead of Viv_Unit[(2 x Viv_Integer)] using Viv_cSpecialEffect
                              • Set Viv_Case[Viv_Integer] = 1
                              • Set Viv_Timer[Viv_Integer] = 0.00
                              • Set Viv_SpecialEffect[Viv_Integer] = (Last created special effect)
                        • Else - Actions
                    • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Viv_Unit[(2 x Viv_Integer)] is alive) Equal to False
            • Then - Actions
              • Set Viv_Unit[((2 x Viv_Integer) - 1)] = Viv_Unit[((2 x Viv_Count) - 1)]
              • Set Viv_Unit[(2 x Viv_Integer)] = Viv_Unit[(2 x Viv_Count)]
              • Set Viv_Case[Viv_Integer] = Viv_Case[Viv_Count]
              • Set Viv_Timer[Viv_Integer] = Viv_Timer[Viv_Count]
              • Set Viv_Tw[Viv_Integer] = Viv_Tw[Viv_Count]
              • Set Viv_L[Viv_Integer] = Viv_L[Viv_Count]
              • Special Effect - Destroy Viv_SpecialEffect[Viv_Integer]
              • Set Viv_SpecialEffect[Viv_Integer] = Viv_SpecialEffect[Viv_Count]
              • Set Viv_Integer = (Viv_Integer - 1)
              • Set Viv_Count = (Viv_Count - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Viv_Count Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
              • Skip remaining actions
            • Else - Actions


210564-albums5645-picture58827.png


  • Bewitched drizzles Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Drz_cAbility
    • Actions
      • Set Drz_Count = (Drz_Count + 1)
      • Set Drz_Unit[((2 x Drz_Count) - 1)] = (Triggering unit)
      • Set Drz_Point[Drz_Count] = (Position of (Triggering unit))
      • Set Drz_TempPoint = (Target point of ability being cast)
      • Set Drz_L[Drz_Count] = (Level of Drz_cAbility for (Triggering unit))
      • Set Drz_Angle[Drz_Count] = (Angle from Drz_Point[Drz_Count] to Drz_TempPoint)
      • Unit - Create 1 Drz_cUnitDummy for (Owner of (Triggering unit)) at Drz_Point[Drz_Count] facing Drz_Angle[Drz_Count] degrees
      • Set Drz_Unit[(2 x Drz_Count)] = (Last created unit)
      • Animation - Change Drz_Unit[(2 x Drz_Count)] flying height to Drz_cStartingHeight at 0.00
      • Set Drz_PF[Drz_Count] = 0.00
      • Set Drz_Case[Drz_Count] = 0
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Drz_Count Equal to 1
        • Then - Actions
          • Trigger - Turn on Bewitched drizzles Loop <gen>
        • Else - Actions
      • Custom script: call RemoveLocation(udg_Drz_TempPoint)
  • Bewitched drizzles Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer Drz_Integer) from 1 to Drz_Count, do (Actions)
        • Loop - Actions
          • Set Drz_PF[Drz_Integer] = (Drz_PF[Drz_Integer] + (0.03 x Drz_cSpeed))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Drz_Case[Drz_Integer] Equal to 0
            • Then - Actions
              • Set Drz_X = (Drz_PF[Drz_Integer] x Drz_cRange)
              • Set Drz_R = (((Drz_X + ((1.00 x Drz_cRange) / 2.00)) x (Drz_X - ((1.00 x Drz_cRange) / 2.00))) x ((-1.00 x Drz_cStartingHeight) / ((Drz_cRange / 2.00) x (Drz_cRange / 2.00))))
              • Animation - Change Drz_Unit[(2 x Drz_Integer)] flying height to Drz_R at 0.00
              • Custom script: set udg_Drz_TX = GetLocationX(udg_Drz_Point[udg_Drz_Integer]) + (Cos(udg_Drz_Angle[udg_Drz_Integer]*bj_DEGTORAD)*udg_Drz_X)
              • Custom script: set udg_Drz_TY = GetLocationY(udg_Drz_Point[udg_Drz_Integer]) + (Sin(udg_Drz_Angle[udg_Drz_Integer]*bj_DEGTORAD)*udg_Drz_X)
              • Custom script: call SetUnitX(udg_Drz_Unit[2*udg_Drz_Integer],udg_Drz_TX)
              • Custom script: call SetUnitY(udg_Drz_Unit[2*udg_Drz_Integer],udg_Drz_TY)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Drz_PF[Drz_Integer] Greater than or equal to 0.50
                • Then - Actions
                  • Set Drz_TempPoint = (Drz_Point[Drz_Integer] offset by Drz_X towards Drz_Angle[Drz_Integer] degrees)
                  • Special Effect - Create a special effect at Drz_TempPoint using Drz_cSpecialEffect
                  • Special Effect - Destroy (Last created special effect)
                  • Set Drz_Group = (Units within Drz_AoE[Drz_L[Drz_Integer]] of Drz_TempPoint matching (((Owner of (Matching unit)) is an enemy of (Owner of Drz_Unit[(2 x Drz_Integer)])) Equal to True))
                  • Unit Group - Pick every unit in Drz_Group and do (Actions)
                    • Loop - Actions
                      • Unit - Cause Drz_Unit[((2 x Drz_Integer) - 1)] to damage (Picked unit), dealing Drz_Damage[Drz_L[Drz_Integer]] damage of attack type Magic and damage type Normal
                  • Custom script: call DestroyGroup(udg_Drz_Group)
                  • Set Drz_Case[Drz_Integer] = 1
                  • Custom script: call RemoveLocation(udg_Drz_Point[udg_Drz_Integer])
                  • Set Drz_Point[Drz_Integer] = (Drz_TempPoint offset by (0.00, 0.00))
                  • Custom script: call RemoveLocation(udg_Drz_TempPoint)
                • Else - Actions
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Drz_Case[Drz_Integer] Equal to 1
                • Then - Actions
                  • Set Drz_X = ((Drz_PF[Drz_Integer] - 0.50) x Drz_cRange)
                  • Set Drz_R = (((-4.00 x Drz_X) x (Drz_X - (Drz_cRange / 2.00))) x (Drz_cNextJumpHeight / ((Drz_cRange / 2.00) x (Drz_cRange / 2.00))))
                  • Animation - Change Drz_Unit[(2 x Drz_Integer)] flying height to Drz_R at 0.00
                  • Custom script: set udg_Drz_TX = GetLocationX(udg_Drz_Point[udg_Drz_Integer]) + (Cos(udg_Drz_Angle[udg_Drz_Integer]*bj_DEGTORAD)*udg_Drz_X)
                  • Custom script: set udg_Drz_TY = GetLocationY(udg_Drz_Point[udg_Drz_Integer]) + (Sin(udg_Drz_Angle[udg_Drz_Integer]*bj_DEGTORAD)*udg_Drz_X)
                  • Custom script: call SetUnitX(udg_Drz_Unit[2*udg_Drz_Integer],udg_Drz_TX)
                  • Custom script: call SetUnitY(udg_Drz_Unit[2*udg_Drz_Integer],udg_Drz_TY)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Drz_PF[Drz_Integer] Greater than or equal to (1.00 - (3.00 x (0.03 x Drz_cSpeed)))
                      • Drz_PF[Drz_Integer] Less than (1.00 - (2.00 x (0.03 x Drz_cSpeed)))
                    • Then - Actions
                      • Set Drz_TempPoint = (Drz_Point[Drz_Integer] offset by Drz_X towards Drz_Angle[Drz_Integer] degrees)
                      • Special Effect - Create a special effect at Drz_TempPoint using Drz_cSpecialEffect
                      • Special Effect - Destroy (Last created special effect)
                      • Custom script: call RemoveLocation(udg_Drz_TempPoint)
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Drz_PF[Drz_Integer] Greater than or equal to 1.00
                        • Then - Actions
                          • Set Drz_TempPoint = (Drz_Point[Drz_Integer] offset by Drz_X towards Drz_Angle[Drz_Integer] degrees)
                          • Set Drz_Group = (Units within Drz_AoE[Drz_L[Drz_Integer]] of Drz_TempPoint matching (((Owner of (Matching unit)) is an enemy of (Owner of Drz_Unit[(2 x Drz_Integer)])) Equal to True))
                          • Unit Group - Pick every unit in Drz_Group and do (Actions)
                            • Loop - Actions
                              • Unit - Cause Drz_Unit[((2 x Drz_Integer) - 1)] to damage (Picked unit), dealing Drz_Damage[Drz_L[Drz_Integer]] damage of attack type Magic and damage type Normal
                          • Custom script: call DestroyGroup(udg_Drz_Group)
                          • Set Drz_Case[Drz_Integer] = 0
                          • Set Drz_PF[Drz_Integer] = 0.00
                          • Custom script: call RemoveLocation(udg_Drz_Point[udg_Drz_Integer])
                          • Unit - Remove Drz_Unit[(2 x Drz_Integer)] from the game
                          • Set Drz_Angle[Drz_Integer] = Drz_Angle[Drz_Count]
                          • Set Drz_Case[Drz_Integer] = Drz_Case[Drz_Count]
                          • Set Drz_L[Drz_Integer] = Drz_L[Drz_Count]
                          • Set Drz_Point[Drz_Integer] = Drz_Point[Drz_Count]
                          • Set Drz_PF[Drz_Integer] = Drz_PF[Drz_Count]
                          • Set Drz_Unit[((2 x Drz_Integer) - 1)] = Drz_Unit[((2 x Drz_Count) - 1)]
                          • Set Drz_Unit[(2 x Drz_Integer)] = Drz_Unit[(2 x Drz_Count)]
                          • Set Drz_Integer = (Drz_Integer - 1)
                          • Set Drz_Count = (Drz_Count - 1)
                          • Custom script: call RemoveLocation(udg_Drz_TempPoint)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • Drz_Count Equal to 0
                            • Then - Actions
                              • Trigger - Turn off (This trigger)
                            • Else - Actions
                        • Else - Actions
                • Else - Actions





Keywords:
Puck, Puke, Faerie, Dragon, Cyan, Pink, spellpack, amethyster, twist, spray, ball, stun, MUI, GUI,
Contents

__ Amethyster Spellpack (Map)

Reviews
11:06, 17th Jul 2012 Magtheridon96: Approved. Job well done. The presentation is also excellent. 4.3/5. It would be nice if you would use multiple unit variables instead of that (2*index - 1) trick. It would also be cool if you were to...

Moderator

M

Moderator

11:06, 17th Jul 2012
Magtheridon96: Approved.

Job well done. The presentation is also excellent.
4.3/5.

  • It would be nice if you would use multiple unit variables instead of that (2*index - 1) trick.
  • It would also be cool if you were to cache the triggering unit in your "Bewitched Drizzles" spell.
 
Level 4
Joined
Feb 19, 2010
Messages
22
Don't use


instead use
This is a test[/hidden*] - The word inbetween these marks " " is the name of the hidden tip, you may change this name and it won't affect it just make sure you keep in these marks " "

remove the star at the end of /hidden] when you do it and it will give this result
This is a test
 
Level 25
Joined
Jun 5, 2008
Messages
2,572
Power is a really intensive function for the processor.

I think writing X*X instead of Power(X,2) is actually much better (i think i read it somewhere).

Also parabola equations can be made in a number of ways with simple math understanding... i think users are past the point of not being able to make one themselves anyway.

Also... your usage of coordinates is wrong.
You use Point with offset then use GetLocationX/Y instead of writing the following (jass example):

X = GetUnitX(...) + distance * Cos(radian)

Simple fix with gui would be to convert angle to radians and use what i mentioned above or use:

call SetUnitX(GetUnitX(...) + udg_Drz_X * Cos(udg_Drz_Angle * bj_DEGTORAD)

Point being, the current use of coordinates is sloppy because you are again using locations to get them.

The spell is written well but i have no time to test it, these are just the things i noticed from looking at it.

If you really want to be efficent (which i think you did aim for because you use SetUnitX/Y custom scripts), remove use of locations ^^

Edit:

Dynamic index recycling would be an improvement also, since atm there is no recycling.
On the side note, i recommend you to start learning JASS ^^
 
Level 8
Joined
Sep 18, 2011
Messages
195
Power is a really intensive function for the processor.

I think...

Thank you for your reply!
I will change the power to X*X

Woah! I am using locations and setting unit xy? lol sorry I didn't notice that because the spell is old and I just continued developing it, so ok I will remove locations usage.

I am learning Jass, actually right now I am making a map with vjass using jngp, this is just a gui spell because I feel that there are people/newbies wanting spells in gui.

I am not sure about "recycling", I searched for it but I don't know what it'll benefit me.
When an instance spell finishes, it takes the last instance (var_count) variables to its variables, then it reduces the var_count and var_index by 1. isn't it the same thing or an additional actions?
 
Last edited:
Top