• 🏆 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!

Rise of the Lycans v1.01

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
This is my second "working" uploaded spell on THW. The spell is 100% MUI and Leakless. Removed all Locations and Destroyed Groups & Special Effects.

Please give Credits on usage. The look of the spell is... Okay but i couldn't find any way to start the lycans Move animation because they're moving forward, throught a action, and when that is done, the Lycans will immediately starting the "Stand" Animation type.

[IMG]http://www.hiveworkshop.com/forums/pastebin_data/zw0jdy/Rise%20of%20the%20Lycans%20Prev.jpg[/IMG]
Rises 3 lycans on each side of the hero, rushing throught everything in it's path, damaging the enemy for 40 damage per Lycan. The Lycans rushes for 1000 range.

Cooldown: 23 seconds.
Here's the Code:
  • RotL Init
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Rise of the Lycans
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • RL_Index Equal to 0
        • Then - Actions
          • Trigger - Turn on RotL Loop <gen>
        • Else - Actions
          • Set RL_Index = (RL_Index + 1)
      • Set RL_MUI = (RL_MUI + 1)
      • Set RL_Boolean[RL_MUI] = True
      • Set RL_Cstr[RL_MUI] = (Triggering unit)
      • Animation - Play RL_Cstr[RL_MUI]'s Spell 2 animation
      • Set RL_Loc[1] = (Position of RL_Cstr[RL_MUI])
      • For each (Integer A) from 1 to 3, do (Actions)
        • Loop - Actions
          • Set RL_Offset[RL_MUI] = (RL_Offset[RL_MUI] + 70.00)
          • Set RL_Degrees[1] = (Facing of RL_Cstr[RL_MUI])
          • Unit - Create 1 Spirit Wolf (Level 1) for (Owner of RL_Cstr[RL_MUI]) at (RL_Loc[1] offset by RL_Offset[RL_MUI] towards ((Facing of RL_Cstr[RL_MUI]) - 90.00) degrees) facing RL_Degrees[1] degrees
          • Unit - Turn collision for (Last created unit) Off
          • Unit Group - Add (Last created unit) to RL_LycanGroup[1]
          • Unit - Create 1 Spirit Wolf (Level 1) for (Owner of RL_Cstr[RL_MUI]) at (RL_Loc[1] offset by RL_Offset[RL_MUI] towards ((Facing of RL_Cstr[RL_MUI]) - 270.00) degrees) facing RL_Degrees[1] degrees
          • Unit - Turn collision for (Last created unit) Off
          • Unit Group - Add (Last created unit) to RL_LycanGroup[1]
      • Custom script: call RemoveLocation (udg_RL_Loc[1])
  • RotL Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer RL_Loop) from 1 to RL_MUI, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • RL_Boolean[RL_Loop] Equal to True
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • RL_CountD[RL_Loop] Less than 1000.00
                • Then - Actions
                  • Set RL_CountD[RL_Loop] = (RL_CountD[RL_Loop] + 20.00)
                  • Unit Group - Pick every unit in RL_LycanGroup[1] and do (Actions)
                    • Loop - Actions
                      • Set RL_Loc[3] = (Position of (Picked unit))
                      • Unit - Move (Picked unit) instantly to (RL_Loc[3] offset by 20.00 towards (Facing of (Picked unit)) degrees)
                      • Animation - Play (Picked unit)'s Stand animation
                      • Special Effect - Create a special effect at RL_Loc[3] using Abilities\Spells\Orc\MirrorImage\MirrorImageDeathCaster.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Set RL_Group1[1] = (Units within 40.00 of RL_Loc[3] matching ((((Matching unit) belongs to an enemy of (Owner of RL_Cstr[RL_Loop])) Equal to True) and (((Matching unit) is Magic Immune) Equal to False)))
                      • Unit Group - Pick every unit in RL_Group1[1] and do (Actions)
                        • Loop - Actions
                          • Set RL_Loc[2] = (Position of (Picked unit))
                          • Unit - Cause RL_Cstr[RL_Loop] to damage (Picked unit), dealing 40.00 damage of attack type Spells and damage type Normal
                          • Special Effect - Create a special effect at RL_Loc[2] using Abilities\Spells\Other\Stampede\StampedeMissileDeath.mdl
                          • Special Effect - Destroy (Last created special effect)
                          • Custom script: call RemoveLocation (udg_RL_Loc[2])
                      • Custom script: call DestroyGroup (udg_RL_Group1[1])
                      • Custom script: call RemoveLocation (udg_RL_Loc[3])
                • Else - Actions
                  • Unit Group - Pick every unit in RL_LycanGroup[1] and do (Actions)
                    • Loop - Actions
                      • Unit - Remove (Picked unit) from the game
                  • Unit Group - Remove all units from RL_LycanGroup[1]
                  • Set RL_CountD[RL_Loop] = 0.00
                  • Set RL_Index = (RL_Index - 1)
                  • Set RL_Boolean[RL_Loop] = False
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • RL_Index Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                      • Set RL_MUI = 0
                    • Else - Actions
            • Else - Actions
The MUI is made throught Indexing.

v 1.01 - Fixed a mayor bug reported by Egorman (The blood effect does no longer affect dead units)

v 1.00 - Uploaded


Creator & Idea: tjordell
Thanks to: Underworld, Rise of the Lycans Movie (where i got the name from xD).

Keywords:
lycan, gui, mui, rise of the lycan, tjordell, wolf
Contents

Rise of the Lycans v1.01 (Map)

Reviews
12th Dec 2015 IcemanBo: Too long time as NeedsFix. Rejected. 12:17, 17th Jun 2010 TriggerHappy: MUI and leakless.

Moderator

M

Moderator

12th Dec 2015
IcemanBo: Too long time as NeedsFix. Rejected.

12:17, 17th Jun 2010
TriggerHappy:

MUI and leakless.
 
Level 19
Joined
Feb 25, 2009
Messages
2,004
- Better use coordinates so you can have the 'walk' animation played while the 'lycans' rushes forward. The stand animation doesn't really fit the 'rush' part ..
- The "RL_Group[1]" group doesn't filter dead units, mechaninal or flying units.
- You can make the lycan's to become transparent as they rush forward or simply increase their size. One of those effects would be really nice.
- Paladon's Knockback system might as well fit the spell well.
- Summoning loop look kinda weird
- You could also increase lycan's speed slighty for every 200 range they move on.

Overall, nothing really special. You might want to change the SFX when you move the lycans, 'cause it doesn't look really amazing.

3/5 with neutral vote.

EDIT: Moving a unit with coordinates instead of location:

  • Actions
    • Custom script: set udg_x = GetUnitX(udg_<unit>)
    • Custom script: set udg_y = GetUnitY(udg_<unit>)
    • Custom script: call SetUnitX(udg_<unit> , udg_x + 10.00 * Cos(GetUnitFacing(udg_<unit>) * 0.017453292) )
    • Custom script: call SetUnitY(udg_<unit> , udg_y + 10.00 * Sin(GetUnitFacing(udg_<unit>) * 0.017453292) )
    • // Removed the "Speed" variable and replaced it with the actuall value.
X, Y and are 'real' variables and udg_<unit> (for example, make it lycan) is a 'unit' variable, but, since you are picking the 'lycans' from a group, you can use GetEnumUnit, without the need of a separate unit variable.
 
Last edited:
Level 19
Joined
Feb 4, 2009
Messages
1,313
baaaaad indexing

indexing is the most efficient way to run things periodically but you have to do it right

(shift the data from the last slot to the next free slot like this:

JASS:
data data data data //4 instances running
data data ---- data //3rd instance is over
data data data ---- //4th instance got moved to 3rd place

this way you only have to count up to 3 instead of a really high number
the spell duration is really short so it won't stack up but remember that for further spells (most of my spells are indexed this way so you may look at them to see how things work or just try out yourself cause it's the easiest way to leran something [there also are tutorials about it and there sould be an example spell for this in the spell section])

and your spell is NOT MUI
set the cooldown to 0 and spam it
you will see that the wolfs run faster and therefore run further
I'm sure you would have seen that yourself if you made a proper testmap
but waiting 23 seconds for next cast really is a turn-off
and only 4 tiny peasants to be consumed by an infinite number of hungry wolfs?
....c'mon.... be more generous

  • Custom script: call SetUnitY( udg_<unit> , udg_y + udg_Speed * Sin( GetUnitFacing( udg_<unit> ) * 0.017453292 ) )

I thought reals would only have 3 digits after the 0,....?
(don't think that anyone will ever notice the difference between 0.1 and 0.11 but still...)
 
Level 11
Joined
Jan 25, 2009
Messages
572
MortAr-, Thanks alot for the suggestions, and now i see again that i really want & need to learn JASS! It looks awesome! =D Could you please give me a hand of help for the things you do with the custom scripts. It seems nice. Send me a PM or add me on Skype. If you want to send me a PM you can do a mini-tutorial for me please, and if you add me on skype/msn you can help me thorught instant messaging xD

+rep

Skype username: dark-man32
MSN: [email protected]

=================================================================

D4RK G4ND4LF, Thanks alot to you also. I had a SICK hurry when creating and uploaded this xD I'm rebuilding my bathroom xD
So now, much to do xD +rep
 
Level 19
Joined
Feb 25, 2009
Messages
2,004

  • Actions
    • Custom script: set udg_x = GetUnitX(udg_<unit>) // The X coordinate of where the unit currently is
    • Custom script: set udg_y = GetUnitY(udg_<unit>) // The Y coordinates of where the unit currently is
    • Custom script: call SetUnitX(udg_<unit> , udg_x + 10.00 * Cos(GetUnitFacing(udg_<unit>) * 0.017453292) ) // Moving the unit to its new coordinate (X) with the given speed (10.00 per interval) calculating the Cos of the unit Facing * times * 0.017453292
    • Custom script: call SetUnitY(udg_<unit> , udg_y + 10.00 * Sin(GetUnitFacing(udg_<unit>) * 0.017453292) ) // Moving the unit to its new coordinate (Y) with the given speed (10.00 per interval) calculating the Sin of the unit Facing * times * 0.017453292


Result: The unit will move 10 units forward (the direction is always forward since we have its facing used for an angle) within the given interval (in this case, every 0.03 seconds). This will make the unit always perform the "stop" order, thus making usage of different animations imposibble.
 
Level 11
Joined
Jul 2, 2008
Messages
601
Also I'd like to inform everybody, who didn't add some more units to the map: the spell damages technical units, flying units and, gush, buildings! :)

Add filter for this please. However, spell immune units are not damaged.
 
Level 11
Joined
Jan 25, 2009
Messages
572
ChaosKnight, No it can't. Because the stampede summons them like my spell but all the "stampede" things isn't moved at the same time. It sometimes summons 2 at 0.50 seconds of casting and another at 0.54 seconds of casting. My spell summons all at the same time and they´re moving at the same direction at the same time. Well but i really need to update this spell but i'm learning JASS atm so i can't...
 
Top