Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
The Hero creates a bond between him and an ally unit. This bond grows
stronger as the two units get closer to each other, thus amplifying their
damage. If the units get very distant from one another, the bond breaks.
Spell Attributes
- GUI
- MUI
- Documentation on how to adjust and import provided
- As user friendly as possible
v1.00
- Released
v1.01
- Removed the minor lag.
- Changed special effects.
- Decreased the refresh rate of the periodic timer from 0.20s to 0.03s.
- Fixed a problem concerning leaks removal (credits to Rmx for pointing that out).
- Fixed a minor mistake concerning MUI Indexing (credits to Rmx for pointing that out).
- Slightly adjusted tooltips.
- Slightly adjusted documentation.
- Added a preload trigger.
v1.02
- Removed all leaks (credits to Dark_Dragon for pointing the leaks out).
- Fixed a bug concerning MUI (credits to Rmx for fixing that).
- Changed special effects (credits to -BerZeKeR- for advising the special effect models).
v1.03
- Increased efficiency.
- Adjusted a little Custom Script mistake.
Comradeship Preload
Events
Map initialization
Conditions
Actions
Custom script: call DestroyGroup(udg_CO_Debug)
Custom script: set udg_CO_Debug = null
Game - Preload Abilities\Weapons\FaerieDragonMissile\FaerieDragonMissile.mdl
Game - Preload Abilities\Weapons\IllidanMissile\IllidanMissile.mdl
Game - Preload Abilities\Spells\Undead\AbsorbMana\AbsorbManaBirthMissile.mdl
Set CO_CenterLoc[0] = (Center of (Playable map area))
-------- SFXDummy1_CO --------
Unit - Create 1 SFXDummy1_CO for Player 1 (Red) at CO_CenterLoc[0] facing Default building facing degrees
Unit - Remove (Last created unit) from the game
-------- SFXDummy2_CO --------
Unit - Create 1 SFXDummy2_CO for Player 1 (Red) at CO_CenterLoc[0] facing Default building facing degrees
Unit - Remove (Last created unit) from the game
-------- SFXDummy3_CO --------
Unit - Create 1 SFXDummy3_CO for Player 1 (Red) at CO_CenterLoc[0] facing Default building facing degrees
Unit - Remove (Last created unit) from the game
Special Effect - Create a special effect at CO_CenterLoc[0] using Abilities\Weapons\FaerieDragonMissile\FaerieDragonMissile.mdl
Special Effect - Destroy (Last created special effect)
Special Effect - Create a special effect at CO_CenterLoc[0] using Abilities\Weapons\IllidanMissile\IllidanMissile.mdl
Special Effect - Destroy (Last created special effect)
Special Effect - Create a special effect at CO_CenterLoc[0] using Abilities\Spells\Undead\AbsorbMana\AbsorbManaBirthMissile.mdl
Special Effect - Destroy (Last created special effect)
Special Effect - Create a special effect attached to the weapon of (Triggering unit) using Abilities\Weapons\IllidanMissile\IllidanMissile.mdl
Set CO_SFXTrig1[CO_Index[2]] = (Last created special effect)
Special Effect - Create a special effect attached to the weapon of (Triggering unit) using Abilities\Spells\Undead\AbsorbMana\AbsorbManaBirthMissile.mdl
Set CO_SFXTrig2[CO_Index[2]] = (Last created special effect)
Special Effect - Create a special effect attached to the weapon of (Target unit of ability being cast) using Abilities\Weapons\FaerieDragonMissile\FaerieDragonMissile.mdl
Set CO_SFXTarg1[CO_Index[2]] = (Last created special effect)
Special Effect - Create a special effect attached to the weapon of (Target unit of ability being cast) using Abilities\Weapons\FaerieDragonMissile\FaerieDragonMissile.mdl
Set CO_SFXTarg2[CO_Index[2]] = (Last created special effect)
-------- Mathematical equation to define four sections of the circle to be used to determine the damage of the units depending on the distance --------
Set CO_DmgLevelIteger[CO_Index[3]] = ((Integer(CO_MaxDistance[CO_Index[3]])) / (Integer((Distance between CO_TrigUnitLoc[CO_Index[3]] and CO_TargUnitLoc[CO_Index[3]]))))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
CO_WaitCounter[CO_Index[3]] Greater than or equal to 1.98
Then - Actions
Set CO_PolProj1[CO_Index[3]] = (CO_CenterLoc[CO_Index[3]] offset by (CO_MaxDistance[CO_Index[3]] / 2.00) towards (CO_EffectOffsetCounter[CO_Index[3]] + 60.00) degrees)
Set CO_PolProj2[CO_Index[3]] = (CO_CenterLoc[CO_Index[3]] offset by (CO_MaxDistance[CO_Index[3]] / 2.00) towards (CO_EffectOffsetCounter[CO_Index[3]] + 120.00) degrees)
Set CO_PolProj3[CO_Index[3]] = (CO_CenterLoc[CO_Index[3]] offset by (CO_MaxDistance[CO_Index[3]] / 2.00) towards (CO_EffectOffsetCounter[CO_Index[3]] + 180.00) degrees)
Set CO_PolProj4[CO_Index[3]] = (CO_CenterLoc[CO_Index[3]] offset by (CO_MaxDistance[CO_Index[3]] / 2.00) towards (CO_EffectOffsetCounter[CO_Index[3]] + 240.00) degrees)
Set CO_PolProj5[CO_Index[3]] = (CO_CenterLoc[CO_Index[3]] offset by (CO_MaxDistance[CO_Index[3]] / 2.00) towards (CO_EffectOffsetCounter[CO_Index[3]] + 300.00) degrees)
Set CO_PolProj6[CO_Index[3]] = (CO_CenterLoc[CO_Index[3]] offset by (CO_MaxDistance[CO_Index[3]] / 2.00) towards (CO_EffectOffsetCounter[CO_Index[3]] + 360.00) degrees)
Else - Actions
Set CO_SFXAlgeo[CO_Index[3]] = (CO_WaitCounter[CO_Index[3]] / 1.98)
Set CO_PolProj1[CO_Index[3]] = (CO_CenterLoc[CO_Index[3]] offset by ((CO_MaxDistance[CO_Index[3]] / 2.00) x CO_SFXAlgeo[CO_Index[3]]) towards (CO_EffectOffsetCounter[CO_Index[3]] + 60.00) degrees)
Set CO_PolProj2[CO_Index[3]] = (CO_CenterLoc[CO_Index[3]] offset by ((CO_MaxDistance[CO_Index[3]] / 2.00) x CO_SFXAlgeo[CO_Index[3]]) towards (CO_EffectOffsetCounter[CO_Index[3]] + 120.00) degrees)
Set CO_PolProj3[CO_Index[3]] = (CO_CenterLoc[CO_Index[3]] offset by ((CO_MaxDistance[CO_Index[3]] / 2.00) x CO_SFXAlgeo[CO_Index[3]]) towards (CO_EffectOffsetCounter[CO_Index[3]] + 180.00) degrees)
Set CO_PolProj4[CO_Index[3]] = (CO_CenterLoc[CO_Index[3]] offset by ((CO_MaxDistance[CO_Index[3]] / 2.00) x CO_SFXAlgeo[CO_Index[3]]) towards (CO_EffectOffsetCounter[CO_Index[3]] + 240.00) degrees)
Set CO_PolProj5[CO_Index[3]] = (CO_CenterLoc[CO_Index[3]] offset by ((CO_MaxDistance[CO_Index[3]] / 2.00) x CO_SFXAlgeo[CO_Index[3]]) towards (CO_EffectOffsetCounter[CO_Index[3]] + 300.00) degrees)
Set CO_PolProj6[CO_Index[3]] = (CO_CenterLoc[CO_Index[3]] offset by ((CO_MaxDistance[CO_Index[3]] / 2.00) x CO_SFXAlgeo[CO_Index[3]]) towards (CO_EffectOffsetCounter[CO_Index[3]] + 360.00) degrees)
i checked the spell and i can say i am very impressed on how fast did you learn so much!
spell idea is really good and test map is awesome, very creative from u!
spell by itself seems leakless, MUI, GUI and usefull.
the only thing which is currently my problem, is that i dont have too fast computer so i have a little lag but only little xD
anyway from when i remember u where total beginner and from now what i can see: is i cant beleve u became so good, but wait ur a new one Deuterium now xD
all in all once again: spell seems to be MUI, leakless, bugfree, usefull, good documented and ofc idea alone is quite good + coding is impressive since you learned this all in a short amount of time.
i can see you will not currently have some time to work on spells but thats ofc understandable, make sure to study for school first if u have exams xD
well it would be 4/5 for now and +rep for great work!
Wow! Very impressive! Really creative and unique! Seems that there are a bit many special effects, cause after second casting I had some lags. (But only after the second ) But it's really brilliant! I think, you deserved 5/5 now!
What picked units!? I don't use groups in all the triggers
Recommended to read the How to improve on every review.
Idea and Creativity - 10/10. Spell Description and In game Balance -9/10. Triggering and Scripting - 6/10. Special effects *Eye Candy* -7/10. User Friendly *Documentation* -9/10. Efficiency -7/10.
Is it Multi Instanceable - [YES].
Final Rating - [48].
Status - ***Highly Recommended***.
Well you leak 3 Point every 0.20 seconds the three points are
Fix them and make it more efficient like not spamming this blue special effect make it like two Axes spinning around the location and fire on them it will be much more Lovely ...anyway fix the Leaks and make it more efficient .......
My view is that this spell IS AWESOME AND VERY FUCKEN COOL .... Thunder STRIKE .. Thumbs UP ext. ext.. .But the problem is read the HOW TO IMPROVE this is what sad.
EDIT : Forgot one thing +REP !!!!!!!!!!!!!!!!!!!!!!!!!!
Well you leak 3 Point every 0.20 seconds the three points are
[ CO_CenterLoc ext.. -- CO_trigUnitLoc -- CO_TargUnitLoc ]
Fix them and make it more efficient like not spamming this blue special effect make it like two Axes spinning around the location and fire on them it will be much more Lovely ...anyway fix the Leaks and make it more efficient ......
Ohh haha yeah I knew I forgot something! that's easy to fix... I'll do that later I tried fixing that quickly now but I'm too sleepy to place the custom scripts in the right places
& although it's not excuse... i mentioned that it still needs fixing in the description
Septimus said:
But I could still bug you to code it in JASS/VJASS
sry i did not really look too well in the GUI code and well i missed this xD but ur right sry! it was a quick look at GUI since when i see GUI its kind a... dono how to say but y my mistake since it leaks but i said "seems" xD
EDIT: lals he even stored in vars but not removed xD well i did not expect that since when someone stores them he removes them as well now i know why i missed it :/
lals he even stored in vars but not removed xD well i did not expect that since when someone stores them he removes them as well now i know why i missed it :/
Well no the thing is that I removed the leak only once when the spell ends and forgot that in that case it'll be leaking every 0.20 seconds... if the purpose wasn't to remove leaks i wouldnt have stored them in variables
Well no the thing is that I removed the leak only once when the spell ends and forgot that in that case it'll be leaking every 0.20 seconds... if the purpose wasn't to remove leaks i wouldnt have stored them in variables
yeah i know xD its coz u stored but removed at wrong place so actually there is still this leaks... and ofc as i quickly looked i was not injecting ur algorithms in my head xD and thats why i said seems leakless :O but anyway this is piece of cake for u to fix!
Well, the idea of the circle wasn't only eye candy. The circle act as a boundary to the maximum distance allowed before having the bond broken. That's why the idea of two spinning axes might not be suitable.
I fixed the leaks, and decreased the minor lag a bit (not updated yet).
However, to make it more efficient, I would like to know if anyone has any advice on what special effects would be suitable for this spell!
I was thinking of using a dummy with an aura model to act as the boundary circle, but that would become annoying to adjust (trial-and-error Scaling Value) and wouldn't be nice special effect.
Could use some better special effects, i have an idea that would look good but that would ruin the idea of "comradeship" (green + purple effects, evul ;..
It's really good for RPG maps, lots of teamwork and sth, and this spell would get handy =)
Could use some better special effects, i have an idea that would look good but that would ruin the idea of "comradeship" (green + purple effects, evul ;..
Well, if you've got an idea that's worth working on, I'll definetly like to hear it
It was a really hard job picking special effects that are nice and not annoying in the same time
And I barely know what each special effect looks like in-game, so I'm usually picking the special effects through trial-and-error rather than having something in mind and doing it :s
-BerZeKeR- said:
It's really good for RPG maps, lots of teamwork and sth, and this spell would get handy =)
Thanks but before I update it, shouldn't the group be destroyed before turning off the periodic trigger? wouldn't it leak otherwise?
And question, I can't understand what this does:
lol xD was not long at all
anyway i checked ur spell as u wanted Deuterium + i checked Rmx one...
k thats what i wanted to tell u it was not MUI until Rmx added that boolean (true / false) thing...
this is coz you always loop to max possible counter but i suggest u to decrease counter and use actaually one one. however that would require some 'smart swap algorithms' so ill leave u at this as is coz its cool
k Rmx now its my turn to blame u for not founding leaks xD
Unit - Create 1 SFXDummy_CO for (Owner of (Triggering unit)) at (CO_CenterLoc[CO_Index[2]] offset by (CO_MaxDistance[CO_Index[2]] / 2.00) towards 60.00 degrees) facing 150.00 degrees
... already 6 point leaks
this is in main trigger
... but forget 6 leaks xD
this is in loop trigger
Unit - Move CO_SFXDummy1[CO_Index[3]] instantly to (CO_CenterLoc[CO_Index[3]] offset by (CO_MaxDistance[CO_Index[3]] / 2.00) towards (CO_EffectOffsetCounter[CO_Index[3]] + 60.00) degrees), facing (CO_EffectOffsetCounter[CO_Index[3]] + 150.00) degrees
:O thats too much
so lets see how much points does he leak per cast:
the spell lasts 30 secs.
so its: 6*(30/0.03+1) =
= 6 *(100+1)
= 606 //
:O thats way tooo much xD
so as u can see everyone makes mistakes but must say gj on making it fully MUI for Deuterium since this is his first spell lol! and its quite good
so Deuterium ill suggest u to use Rmx version and fix this leaks i pointed + if u really want u can do that what -BZK- said, then it'll be great
EDIT: Actually to explain groups!
what GUI does when u create global 'Unit Group' variable is that it generates function which is executed on map init before everything else and it sets that variables to this:
JASS:
set udg_MyGroupVar = CreateGroup()
the creategroup is the only way to create group. when you set the group vars GUI does not have CreateGroup but it has advanced functions which use CreateGroup functions such as Pick every unit matching... or any of this will generate a new group. so if you are not changing the group but only removing and adding units there is no need to remove that group since you did not lost sight of it and you will again use it. but points well once you use them you cant move them and use again so thats why we remove the points. groups dont need to be destroyed if you will use it again (the same one).
this is coz you always loop to max possible counter but i suggest u to decrease counter and use actaually one one. however that would require some 'smart swap algorithms' so ill leave u at this as is coz its cool
Are you talking about the WaitCounter and the EffectOffsetCounter? and haha don't worry, im good at algorithms but I just need to understand what u mean by this
Dark_Dragon said:
k Rmx now its my turn to blame u for not founding leaks xD
I'll be giving his ideas a try tonight and update it
Dark_Dragon said:
Actually to explain groups!
what GUI does when u create global 'Unit Group' variable is that it generates function which is executed on map init before everything else and it sets that variables to this:
set udg_MyGroupVar = CreateGroup()
the creategroup is the only way to create group. when you set the group vars GUI does not have CreateGroup but it has advanced functions which use CreateGroup functions such as Pick every unit matching... or any of this will generate a new group. so if you are not changing the group but only removing and adding units there is no need to remove that group since you did not lost sight of it and you will again use it. but points well once you use them you cant move them and use again so thats why we remove the points. groups dont need to be destroyed if you will use it again (the same one).
Umm yes i get your point. I just thought it'll be more efficient if the group was removed when not in use and then created when needed, but i guess it would barely make any difference right...
Aspard said:
Why do you always write LOOOL after each sentence?
Well didn't say that it does not contain leaks ...... LOOOOL....
But still i wasn't checking for leaks i was making it 100% MUI LOOl ...
Why do you always write LOOOL after each sentence?
lool well i just said it leaks and was ofc kidding! like the hell ill blame u, it was my mistake to say it was MUI and leakless :O
Are you talking about the WaitCounter and the EffectOffsetCounter? and haha don't worry, im good at algorithms but I just need to understand what u mean by this
no no i was just talking that when spell is casted multiple times and if some ends you should decrease that max counter, the same u do with current spell casts counter
but as said is not needed coz it rockzzzz this way toooo !!!
I totally forgot about Polar projections leaking two points... gotta fix that
well since its ur spell do what u want, its already cool but might be even more if u try that effects -BZK- suggested
Umm yes i get your point. I just thought it'll be more efficient if the group was removed when not in use and then created when needed, but i guess it would barely make any difference right...
:O lol thats actually called 'dynamic object works' and thats my fav and ofc best way of coding spells. but anyway if paladon did not work on that, then well maybe its k for u not to try. but do what u want
Thank you all guys for you efforts and help
As I always say: Appreciated!
no no i was just talking that when spell is casted multiple times and if some ends you should decrease that max counter, the same u do with current spell casts counter
I'll leave that for later... I'm happy enough that I finally came to understand how the indexing system functions so until I make a new spell using some dynamic system like the one you're talking about, I wont adjust this...
you understand what i mean eh?
Anyways, I took BerZeKeR's advice and adjusted the special effects to what he said... I'm still at a confusion of which of the two are better (Phoenix or the Green/Blue/White) but decided to post this one...
I hope there's nothing more to fix! Believe me, I already didn't like GUI, now i came to hate it! but as i said, I won't be going fully going into vJass until I'm good with GUI
EDIT:
DarkDragon i have one question to know whether I gotta fix that or not...
In Jass, let's say I wanted to create the group, I'd insert:
JASS:
if udg_CO_Debug == null then
set udg_CO_Debug = CreateGroup()
endif
That would be done in order not to create the group if it's already created, right?
Because when I do it in my spell, once the last instance of the spell ends, it give the message in-game about double-freeing the group...
Well i cheked it out ......... one flaw ... try not to remove the units add an EXPIRATION time like 0.01 seconds to them.... they will create their death effect when they expire...
Then also remove the Special effects ... coz when they expire they will create those effects ...
wooot nice effects!
thats when u listen to -BZK- he is quite creative
and np thats good coding really.
That would be done in order not to create the group if it's already created, right?
Because when I do it in my spell, once the last instance of the spell ends, it give the message in-game about double-freeing the group...
well the problem in jass is that when u destroy the group that variable which was pointing to group is not cleared. thats why we null them in order to free them coz if they are not! then that "if then else" you posted will never trigger coz even if group is destroyed its not cleared... which means its not null
so you have to do that this way:
JASS:
call DestroyGroup(<whichGroup>)
set <whichGroup> = null // -> note this is a must
// and now
if <whichGroup> == null then
set <whichGroup> = CreateGroup()
endif
Well i cheked it out ......... one flaw ... try not to remove the units add an EXPIRATION time like 0.01 seconds to them.... they will create their death effect when they expire...
Then also remove the Special effects ... coz when they expire they will create those effects ...
Yupp BZK's idea with my spiral touch ended up being amazingg
Dark_Dragon said:
well the problem in jass is that when u destroy the group that variable which was pointing to group is not cleared. thats why we null them in order to free them coz if they are not! then that "if then else" you posted will never trigger coz even if group is destroyed its not cleared... which means its not null
so you have to do that this way:
JASS:
call DestroyGroup(<whichGroup>)
set <whichGroup> = null // -> note this is a must
// and now
if <whichGroup> == null then
set <whichGroup> = CreateGroup()
endif
Looks nice, still dunno if it works with projectile models, try to apply transparency(vertex coloring) to about 50-70, that would make dummies less visible and it would look even better
Looks nice, still dunno if it works with projectile models, try to apply transparency(vertex coloring) to about 50-70, that would make dummies less visible and it would look even better
Yup used them and added the spiral, & VOILA! Oh & added you to the credits ;D
Anyways, vertex coloring isn't an option because only the missile would change color but the projectile particles won't...
I implemented this ability into my map, and I must say, the biggest problem is the lag, I've tried greatly reducing the visuals and it still lags if 4 or more instances of the ability is running, which is bad since it's a custom hero game so every player can choose it. I'm working on ways to reduce it but if you've got any suggestions I'd love to try em.
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.