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

Charpen Shuriken v. 1.2 [Special Edition!]

  • Like
Reactions: matej
This spell is not new to say but i like it. It will be in the New-Age aos Battle for Honor [LINK]

50% credits to me
50% credits to NFWar


I switched this spell with the Adrenaline Rush [LINK] for Fudo, the Assassin in the human race. I switched it because some peoples said that the Adrenaline Rush was more like a "Titan" like spell. So i created a new one. Well anyways, here's the description, code and spell.


[++] - I have made that the Shurinken is a bit "swingy" when moving, to make the spell more realistic. Because a Shuriken do not always fly STRAIGHT forward.

[+]
- The spell is pretty simple, for advanced peoples, but still very effective and have a pretty nice SFX. From my mind.

[+] - The spell really match the hero Fudo, the Assassin because the spell is a bit of "Assassin" kind. "Sneaky ability" you know.

[-] - I dont have documentation for the triggers yet but i will add that later. I did just wanted it uploaded.

[-] - The Variable names is pretty complicated because of my mind. Let's call me a little psychopath within my brain :grin::eekani:


Charpen Shuriken [IMG]http://www.hiveworkshop.com/forums/pastebin_data/i0t89i/BTNShuriken.jpg[/IMG]
The Assassin casts a Shuriken in the targeted direction, cuts every enemy unit in it's path. When the Shuriken have reached the limit of traveled range it will return back to it's master.|nUnits can be hit twice.

Level 1 - 70 damage at 600 range.

Level 2 - 100 damage at 700 range.

Level 3 - 130 damage at 800 range.

Level 4 - 160 damage at 900 range.

Cooldown: 14/13/12/11 seconds.

  • CS Start
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Charpen Shuriken
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • CS_Integer Equal to 0
        • Then - Actions
          • Trigger - Turn on CS Loop <gen>
        • Else - Actions
      • Set CS_Integer = (CS_Integer + 1)
      • Set CS_MUI = (CS_MUI + 1)
      • Set CS_On[CS_MUI] = True
      • Set CS_Back[CS_MUI] = False
      • -------- ------------------------------------------------------- --------
      • Set CS_Hero[CS_MUI] = (Triggering unit)
      • Set CS_Loc[0] = (Position of (Triggering unit))
      • Set CS_Loc[1] = (Target point of ability being cast)
      • Set CS_Angle[CS_MUI] = (Angle from CS_Loc[0] to CS_Loc[1])
      • Set CS_Loc[2] = (CS_Loc[0] offset by 10.00 towards CS_Angle[CS_MUI] degrees)
      • Unit - Create 1 Dummy Axe for (Owner of (Triggering unit)) at CS_Loc[2] facing CS_Angle[CS_MUI] degrees
      • Set CS_Projectile[CS_MUI] = (Last created unit)
      • Set CS_PreParabola[CS_MUI] = 0.00
      • -------- ------------------------------------------------------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Random integer number between 0 and 1) Equal to 0
        • Then - Actions
          • Set CS_SwingSide[CS_MUI] = False
        • Else - Actions
          • Set CS_SwingSide[CS_MUI] = True
      • -------- ------------------------------------------------------- --------
      • Set CS_Level[CS_MUI] = (Level of Charpen Shuriken for (Triggering unit))
      • Set CS_Damage[CS_MUI] = (50.00 + (30.00 x (Real(CS_Level[CS_MUI]))))
      • Set CS_Distance[CS_MUI] = (500.00 + (100.00 x (Real(CS_Level[CS_MUI]))))
      • Set CS_MaxSideDistance[CS_MUI] = 100.00
      • Set CS_Period[CS_MUI] = 400.00
      • Set CS_SubDistance[CS_MUI] = CS_Period[CS_MUI]
      • Set CS_Speed[CS_MUI] = 30.00
      • Set CS_TurnSpeed[CS_MUI] = 5.00
      • Custom script: call RemoveLocation (udg_CS_Loc[0])
      • Custom script: call RemoveLocation (udg_CS_Loc[1])
      • Custom script: call RemoveLocation (udg_CS_Loc[2])
  • CS Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer CS_i) from 1 to CS_MUI, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • CS_On[CS_i] Equal to True
            • Then - Actions
              • Set CS_Loc[3] = (Position of CS_Projectile[CS_i])
              • Set CS_SubDistance[CS_i] = (CS_SubDistance[CS_i] - CS_Speed[CS_i])
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • CS_Back[CS_i] Equal to True
                • Then - Actions
                  • Set CS_Loc[6] = (Position of CS_Hero[CS_i])
                  • Set CS_Angle[CS_i] = (Angle from CS_Loc[3] to CS_Loc[6])
                  • Set CS_Loc[4] = (CS_Loc[3] offset by CS_Speed[CS_i] towards CS_Angle[CS_i] degrees)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Distance between CS_Loc[3] and CS_Loc[6]) Less than or equal to 50.00
                    • Then - Actions
                      • Unit - Remove CS_Projectile[CS_i] from the game
                      • Unit Group - Remove all units from CS_SafeGroup1
                      • Unit Group - Remove all units from CS_SafeGroup2
                      • Set CS_On[CS_i] = False
                      • Set CS_Integer = (CS_Integer - 1)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • CS_Integer Equal to 0
                        • Then - Actions
                          • Trigger - Turn off (This trigger)
                          • Set CS_MUI = 0
                        • Else - Actions
                    • Else - Actions
                  • Custom script: call RemoveLocation (udg_CS_Loc[6])
                • Else - Actions
                  • Set CS_Distance[CS_i] = (CS_Distance[CS_i] - CS_Speed[CS_i])
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • CS_Distance[CS_i] Less than or equal to 0.00
                    • Then - Actions
                      • Set CS_Back[CS_i] = True
                    • Else - Actions
                  • Set CS_Loc[4] = (CS_Loc[3] offset by CS_Speed[CS_i] towards CS_Angle[CS_i] degrees)
              • Set CS_Parabola[CS_i] = (((4.00 x CS_MaxSideDistance[CS_i]) / CS_Period[CS_i]) x ((CS_Period[CS_i] - CS_SubDistance[CS_i]) x (CS_SubDistance[CS_i] / CS_Period[CS_i])))
              • Set CS_SideDistance[CS_i] = (CS_Parabola[CS_i] - CS_PreParabola[CS_i])
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • CS_SwingSide[CS_i] Equal to True
                • Then - Actions
                  • Set CS_Loc[5] = (CS_Loc[4] offset by CS_SideDistance[CS_i] towards (CS_Angle[CS_i] + 90.00) degrees)
                • Else - Actions
                  • Set CS_Loc[5] = (CS_Loc[4] offset by CS_SideDistance[CS_i] towards (CS_Angle[CS_i] - 90.00) degrees)
              • Set CS_PreParabola[CS_i] = CS_Parabola[CS_i]
              • Unit - Move CS_Projectile[CS_i] instantly to CS_Loc[5]
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • CS_SubDistance[CS_i] Less than or equal to 0.00
                • Then - Actions
                  • Set CS_SubDistance[CS_i] = CS_Period[CS_i]
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • CS_SwingSide[CS_i] Equal to True
                    • Then - Actions
                      • Set CS_SwingSide[CS_i] = False
                    • Else - Actions
                      • Set CS_SwingSide[CS_i] = True
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • CS_Back[CS_i] Equal to True
                • Then - Actions
                  • Set CS_Group[2] = (Units within 150.00 of CS_Loc[5] matching ((((Matching unit) belongs to an enemy of (Owner of CS_Hero[CS_i])) Equal to True) and ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is Magic Immune) Equal to False) and (((Matching unit) is in C
                  • Unit Group - Pick every unit in CS_Group[2] and do (Actions)
                    • Loop - Actions
                      • Unit - Cause CS_Hero[CS_i] to damage (Picked unit), dealing CS_Damage[CS_i] damage of attack type Spells and damage type Normal
                      • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Weapons\HydraliskImpact\HydraliskImpact.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Unit Group - Add (Picked unit) to CS_SafeGroup2
                  • Custom script: call DestroyGroup (udg_CS_Group[2])
                • Else - Actions
                  • Set CS_Group[1] = (Units within 150.00 of CS_Loc[5] matching ((((Matching unit) belongs to an enemy of (Owner of CS_Hero[CS_i])) Equal to True) and ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is Magic Immune) Equal to False) and (((Matching unit) is in C
                  • Unit Group - Pick every unit in CS_Group[1] and do (Actions)
                    • Loop - Actions
                      • Unit - Cause CS_Hero[CS_i] to damage (Picked unit), dealing CS_Damage[CS_i] damage of attack type Spells and damage type Normal
                      • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Weapons\HydraliskImpact\HydraliskImpact.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Unit Group - Add (Picked unit) to CS_SafeGroup1
                  • Custom script: call DestroyGroup (udg_CS_Group[1])
              • Destructible - Pick every destructible within 150.00 of CS_Loc[5] and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • ((Picked destructible) is alive) Equal to True
                    • Then - Actions
                      • Destructible - Kill (Picked destructible)
                    • Else - Actions
              • Custom script: call RemoveLocation (udg_CS_Loc[3])
              • Custom script: call RemoveLocation (udg_CS_Loc[4])
              • Custom script: call RemoveLocation (udg_CS_Loc[5])
            • Else - Actions
[v. 1.2] - [Added new custom made Icon made by me and NFWar to the spell.]

[v. 1.1] - [NFWar added a smooth swing, like a worm to the Shuriken]

[v. 1.0] - [Created and Uploaded!]


Keywords:
Assassin, Shuriken, Charpen, tjordell, svenskunganka, Fudo, New-Age AOS
Contents

Charpen Shuriken (Map)

Reviews
10:28, 24th Apr 2010 The_Reborn_Devil: The triggering looks good, but the curving or swinging wasn't really realistic. You should try to work more on it, but the status of this spell will be unchanged. Status: Approved Rating:Useful

Moderator

M

Moderator

10:28, 24th Apr 2010
The_Reborn_Devil:

The triggering looks good, but the curving or swinging wasn't really realistic. You should try to work more on it, but the status of this spell will be unchanged.


Status: Approved
Rating:Useful
 
Level 11
Joined
Jan 25, 2009
Messages
572
Whooops, already i see a thing that i didn't saw but that's not even causing ANY bugs at all because the projectile is looking exactly the same from every degree.

I set the point variable in the start with an angle variable that haven't event been stored something into. It's getting stored directly after i've set the point xD "A sneaky one there eya?"

EDIT: Thank you mnib, glad you like it =)
 
Level 11
Joined
Jan 25, 2009
Messages
572
NoMoreChallenge, Thank you =) Right now, me and my buddy is implementing arc. So if the hero blink the Shuriken wont turn right away, it will turn with arc. And we're adding more flexible zig zag to the Shuriken.

EDIT: On-Topic!This is my first spell that really got approven and my first spell that people likes.
 
Level 11
Joined
Jan 25, 2009
Messages
572
Thanks alot War Golum :D

EDIT: The thing why this spell is still a bit buggy, is that when the Shuriken zig zags it loses the distance. I'll explain for you.

This is if it would go straight forward (Not losing any Distance, i will use the same number of (-&_) for both examples)=

__________ <-- Straight
_-_-_-_-_- <--- Zig Zag.

You see that when the Shuriken goes to the left & right side, it adds that to the range, so the shuriken may just fly 600 range instead of 800.
Well my epic friend is fixing that for me now (NFWar). He uses parabola and stuffs like that, that i dont understand something of but he will teach me =)
 
Level 3
Joined
Feb 23, 2010
Messages
46
Really nice idea. I think i will use the skill in my map, but i have to create an item version of it (map: Item Wars) :)
It reminds me of a spell out of a manga i read :)
 
Level 20
Joined
Jul 6, 2009
Messages
1,885
I have made that the Shurinken is a bit "swingy" when moving, to make the spell more realistic. Because a Shuriken do not always fly STRAIGHT forward.

I think it always flies straight except when it's magical :ugly:

Apart from that,could be useful spell...maybe make the projectile a bit smaller.
Also DISBTN doesn't work for icon,set it's path to ReplaceableTextures\CommandButtonsDisabled\DISBTNShuriken.blp
But it's not important for a spell :xxd:
 
Last edited:
Top