• 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!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

Fire, Light and Lightning V1.05

  • Like
Reactions: calex3
REQUIRES JNGP


So, awhile ago, I tried making these in GUI, they wern't very good, and were unreliable at times. A few days ago, I had a real urge to clean up some space on my computer, and found these. After an hour or two on each, I had recoded them into a better and faster way.

Although my understanding of JASS isn't the greatest, but I'm willing to learn everything I can.

So far the damage isn't triggered, but I'll learn to get around that. I also use TSA's, but thats because I don't quite understand timers yet.

Hope you like them, and a complete list of the diffrent lightning rawcodes is in the "The explanation" comment area.

Triggers:

JASS:
scope Light initializer InitTrig_Light
     
    globals
        private constant string  Lightning = "HWSB" //RAWCODE!
        private constant integer SPELL_ID  = 'A003'
        private constant string  Effect1   = "Abilities\\Spells\\Human\\ReviveHuman\\ReviveHuman.mdl"
        private constant integer DAMBASE   = 100 // This is the base damage. It is multiplyed by the level later
        private constant real    Real1     = 45 //Change the Real stuff up to Real4 to change were the lightning is created(Degrees)
        private constant real    Real2     = 135
        private constant real    Real3     = 225
        private constant real    Real4     = 315
        private constant real    Real5     = 400 // Change this to increase or decrease how far away the lightning is
        private constant real    Real6     = 750 // This changes the size of the area were units are grouped and effects are created
        private constant real    Real7     = 500//Change this to set the height of the lightnings in the air.
        private constant real    Real8     = 250//Change this to set the height were the lightning meets above the caster.Set it heigher them Rea7 to make it over the cube.
        private boolexpr BOOL // Don't touch this
    endglobals
     
    private function FilterFunc takes nothing returns boolean        
        local unit u = GetFilterUnit()        
        local boolean ok = GetWidgetLife(u) > .405 and IsUnitEnemy(u,GetOwningPlayer(GetTriggerUnit()))        
        set u = null        
        return ok    
    endfunction 

     private function Light_Conditions takes nothing returns boolean
          return GetSpellAbilityId() == SPELL_ID
     endfunction

     private function Light_Actions takes nothing returns nothing
          local unit      C     = GetSpellAbilityUnit()
          local location  CL    = GetUnitLoc(C)
          local real      CR    = GetUnitX(C)
          local real      RC    = GetUnitY(C)
          local rect      R     = RectFromCenterSizeBJ(CL,Real6,Real6)
          local player    Y     = GetOwningPlayer(C)
          local integer   Level = GetUnitAbilityLevel(C,SPELL_ID)
          local integer   Index
          local real      X1    = CR + Real5 * Cos(Real1*bj_DEGTORAD)
          local real      X2    = CR + Real5 * Cos(Real2*bj_DEGTORAD)
          local real      X3    = CR + Real5 * Cos(Real3*bj_DEGTORAD)
          local real      X4    = CR + Real5 * Cos(Real4*bj_DEGTORAD)
          local real      Y1    = RC + Real5 * Sin(Real1*bj_DEGTORAD)
          local real      Y2    = RC + Real5 * Sin(Real2*bj_DEGTORAD)
          local real      Y3    = RC + Real5 * Sin(Real3*bj_DEGTORAD)
          local real      Y4    = RC + Real5 * Sin(Real4*bj_DEGTORAD)
          local real      Z1    = GetUnitFlyHeight(C)+Real7
          local real      Z2    = GetUnitFlyHeight(C)+Real8
          local lightning array L
          local real      M1
          local real      M2
          local real      X5
          local real      Y5
          local integer   P     =1
          local real Damage = DAMBASE * Level
          local location  M
          local integer   PE    =30*Level
          local unit      U
          local group     G = CreateGroup()
          set L[0]    = AddLightning(Lightning,true,X1,Y1,X2,Y2)
          set L[1]    = AddLightning(Lightning,true,X2,Y2,X3,Y3)
          set L[2]    = AddLightning(Lightning,true,X3,Y3,X4,Y4)
          set L[3]    = AddLightning(Lightning,true,X4,Y4,X1,Y1)
          set L[4]    = AddLightningEx(Lightning,true,X1,Y1,0,X1,Y1,Z1)
          set L[5]    = AddLightningEx(Lightning,true,X2,Y2,0,X2,Y2,Z1)
          set L[6]    = AddLightningEx(Lightning,true,X3,Y3,0,X3,Y3,Z1)
          set L[7]    = AddLightningEx(Lightning,true,X4,Y4,0,X4,Y4,Z1)
          set L[8]    = AddLightningEx(Lightning,true,X1,Y1,Z1,X2,Y2,Z1)
          set L[9]    = AddLightningEx(Lightning,true,X2,Y2,Z1,X3,Y3,Z1)
          set L[10]   = AddLightningEx(Lightning,true,X3,Y3,Z1,X4,Y4,Z1)
          set L[11]   = AddLightningEx(Lightning,true,X4,Y4,Z1,X1,Y1,Z1)
          set L[12]   = AddLightningEx(Lightning,true,X1,Y1,Z1,CR,RC,Z2)
          set L[13]   = AddLightningEx(Lightning,true,X2,Y2,Z1,CR,RC,Z2)
          set L[14]   = AddLightningEx(Lightning,true,X3,Y3,Z1,CR,RC,Z2)
          set L[15]   = AddLightningEx(Lightning,true,X4,Y4,Z1,CR,RC,Z2)
          set L[16]   = AddLightningEx(Lightning,true,X1,Y1,0,CR,RC,Z2)
          set L[17]   = AddLightningEx(Lightning,true,X2,Y2,0,CR,RC,Z2)
          set L[18]   = AddLightningEx(Lightning,true,X3,Y3,0,CR,RC,Z2)
          set L[19]   = AddLightningEx(Lightning,true,X4,Y4,0,CR,RC,Z2)
          call GroupEnumUnitsInRange(G,CR,RC,Real6,BOOL)
          loop
               exitwhen P>PE
               set M = GetRandomLocInRect(R)
               call DestroyEffect(AddSpecialEffectLoc(Effect1,M))
               set M = GetRandomLocInRect(R)
               call DestroyEffect(AddSpecialEffectLoc(Effect1,M))
               set M = GetRandomLocInRect(R)
               call DestroyEffect(AddSpecialEffectLoc(Effect1,M))
               set M = GetRandomLocInRect(R)
               call DestroyEffect(AddSpecialEffectLoc(Effect1,M))
               call RemoveLocation(M)      
               call TriggerSleepAction(.3)
               set P=P+1
          endloop
          loop
               set U = FirstOfGroup(G)
               exitwhen U==null
               call GroupRemoveUnit(G,U)
               call UnitDamageTarget(C,U,Damage,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
          endloop
          call RemoveRect(R)
          set P = 0
          loop
               exitwhen P==20
               call DestroyLightning(L)
               set P = P+1
          endloop
          call DestroyGroup(G)
          set C=null
     endfunction

//===========================================================================
     private function InitTrig_Light takes nothing returns nothing
          local trigger I = CreateTrigger()
          call TriggerRegisterAnyUnitEventBJ(I,EVENT_PLAYER_UNIT_SPELL_CAST)
          call TriggerAddCondition(I,Condition(function Light_Conditions))
          call TriggerAddAction(I,function Light_Actions)
          set I=null
          call Preload(Effect1)
          set BOOL = Filter(function FilterFunc)
     endfunction
endscope
JASS:
scope Light initializer InitTrig_Light
     
    globals
        private constant string  Lightning = "HWSB" //RAWCODE!
        private constant integer SPELL_ID  = 'A003'
        private constant string  Effect1   = "Abilities\\Spells\\Human\\ReviveHuman\\ReviveHuman.mdl"
        private constant integer DAMBASE   = 100 // This is the base damage. It is multiplyed by the level later
        private constant real    Real1     = 45 //Change the Real stuff up to Real4 to change were the lightning is created(Degrees)
        private constant real    Real2     = 135
        private constant real    Real3     = 225
        private constant real    Real4     = 315
        private constant real    Real5     = 400 // Change this to increase or decrease how far away the lightning is
        private constant real    Real6     = 750 // This changes the size of the area were units are grouped and effects are created
        private constant real    Real7     = 500//Change this to set the height of the lightnings in the air.
        private constant real    Real8     = 250//Change this to set the height were the lightning meets above the caster.Set it heigher them Rea7 to make it over the cube.
        private boolexpr BOOL // Don't touch this
    endglobals
     
    private function FilterFunc takes nothing returns boolean        
        local unit u = GetFilterUnit()        
        local boolean ok = GetWidgetLife(u) > .405 and IsUnitEnemy(u,GetOwningPlayer(GetTriggerUnit()))        
        set u = null        
        return ok    
    endfunction 

     private function Light_Conditions takes nothing returns boolean
          return GetSpellAbilityId() == SPELL_ID
     endfunction

     private function Light_Actions takes nothing returns nothing
          local unit      C     = GetSpellAbilityUnit()
          local location  CL    = GetUnitLoc(C)
          local real      CR    = GetUnitX(C)
          local real      RC    = GetUnitY(C)
          local rect      R     = RectFromCenterSizeBJ(CL,Real6,Real6)
          local player    Y     = GetOwningPlayer(C)
          local integer   Level = GetUnitAbilityLevel(C,SPELL_ID)
          local integer   Index
          local real      X1    = CR + Real5 * Cos(Real1*bj_DEGTORAD)
          local real      X2    = CR + Real5 * Cos(Real2*bj_DEGTORAD)
          local real      X3    = CR + Real5 * Cos(Real3*bj_DEGTORAD)
          local real      X4    = CR + Real5 * Cos(Real4*bj_DEGTORAD)
          local real      Y1    = RC + Real5 * Sin(Real1*bj_DEGTORAD)
          local real      Y2    = RC + Real5 * Sin(Real2*bj_DEGTORAD)
          local real      Y3    = RC + Real5 * Sin(Real3*bj_DEGTORAD)
          local real      Y4    = RC + Real5 * Sin(Real4*bj_DEGTORAD)
          local real      Z1    = GetUnitFlyHeight(C)+Real7
          local real      Z2    = GetUnitFlyHeight(C)+Real8
          local lightning array L
          local real      M1
          local real      M2
          local real      X5
          local real      Y5
          local integer   P     =1
          local real Damage = DAMBASE * Level
          local location  M
          local integer   PE    =30*Level
          local unit      U
          local group     G = CreateGroup()
          set L[0]    = AddLightning(Lightning,true,X1,Y1,X2,Y2)
          set L[1]    = AddLightning(Lightning,true,X2,Y2,X3,Y3)
          set L[2]    = AddLightning(Lightning,true,X3,Y3,X4,Y4)
          set L[3]    = AddLightning(Lightning,true,X4,Y4,X1,Y1)
          set L[4]    = AddLightningEx(Lightning,true,X1,Y1,0,X1,Y1,Z1)
          set L[5]    = AddLightningEx(Lightning,true,X2,Y2,0,X2,Y2,Z1)
          set L[6]    = AddLightningEx(Lightning,true,X3,Y3,0,X3,Y3,Z1)
          set L[7]    = AddLightningEx(Lightning,true,X4,Y4,0,X4,Y4,Z1)
          set L[8]    = AddLightningEx(Lightning,true,X1,Y1,Z1,X2,Y2,Z1)
          set L[9]    = AddLightningEx(Lightning,true,X2,Y2,Z1,X3,Y3,Z1)
          set L[10]   = AddLightningEx(Lightning,true,X3,Y3,Z1,X4,Y4,Z1)
          set L[11]   = AddLightningEx(Lightning,true,X4,Y4,Z1,X1,Y1,Z1)
          set L[12]   = AddLightningEx(Lightning,true,X1,Y1,Z1,CR,RC,Z2)
          set L[13]   = AddLightningEx(Lightning,true,X2,Y2,Z1,CR,RC,Z2)
          set L[14]   = AddLightningEx(Lightning,true,X3,Y3,Z1,CR,RC,Z2)
          set L[15]   = AddLightningEx(Lightning,true,X4,Y4,Z1,CR,RC,Z2)
          set L[16]   = AddLightningEx(Lightning,true,X1,Y1,0,CR,RC,Z2)
          set L[17]   = AddLightningEx(Lightning,true,X2,Y2,0,CR,RC,Z2)
          set L[18]   = AddLightningEx(Lightning,true,X3,Y3,0,CR,RC,Z2)
          set L[19]   = AddLightningEx(Lightning,true,X4,Y4,0,CR,RC,Z2)
          call GroupEnumUnitsInRange(G,CR,RC,Real6,BOOL)
          loop
               exitwhen P>PE
               set M = GetRandomLocInRect(R)
               call DestroyEffect(AddSpecialEffectLoc(Effect1,M))
               set M = GetRandomLocInRect(R)
               call DestroyEffect(AddSpecialEffectLoc(Effect1,M))
               set M = GetRandomLocInRect(R)
               call DestroyEffect(AddSpecialEffectLoc(Effect1,M))
               set M = GetRandomLocInRect(R)
               call DestroyEffect(AddSpecialEffectLoc(Effect1,M))
               call RemoveLocation(M)      
               call TriggerSleepAction(.3)
               set P=P+1
          endloop
          loop
               set U = FirstOfGroup(G)
               exitwhen U==null
               call GroupRemoveUnit(G,U)
               call UnitDamageTarget(C,U,Damage,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
          endloop
          call RemoveRect(R)
          set P = 0
          loop
               exitwhen P==20
               call DestroyLightning(L)
               set P = P+1
          endloop
          call DestroyGroup(G)
          set C=null
     endfunction

//===========================================================================
     private function InitTrig_Light takes nothing returns nothing
          local trigger I = CreateTrigger()
          call TriggerRegisterAnyUnitEventBJ(I,EVENT_PLAYER_UNIT_SPELL_CAST)
          call TriggerAddCondition(I,Condition(function Light_Conditions))
          call TriggerAddAction(I,function Light_Actions)
          set I=null
          call Preload(Effect1)
          set BOOL = Filter(function FilterFunc)
     endfunction
endscope
JASS:
scope Light initializer InitTrig_Light
     
    globals
        private constant string  Lightning = "HWSB" //RAWCODE!
        private constant integer SPELL_ID  = 'A003'
        private constant string  Effect1   = "Abilities\\Spells\\Human\\ReviveHuman\\ReviveHuman.mdl"
        private constant integer DAMBASE   = 100 // This is the base damage. It is multiplyed by the level later
        private constant real    Real1     = 45 //Change the Real stuff up to Real4 to change were the lightning is created(Degrees)
        private constant real    Real2     = 135
        private constant real    Real3     = 225
        private constant real    Real4     = 315
        private constant real    Real5     = 400 // Change this to increase or decrease how far away the lightning is
        private constant real    Real6     = 750 // This changes the size of the area were units are grouped and effects are created
        private constant real    Real7     = 500//Change this to set the height of the lightnings in the air.
        private constant real    Real8     = 250//Change this to set the height were the lightning meets above the caster.Set it heigher them Rea7 to make it over the cube.
        private boolexpr BOOL // Don't touch this
    endglobals
     
    private function FilterFunc takes nothing returns boolean        
        local unit u = GetFilterUnit()        
        local boolean ok = GetWidgetLife(u) > .405 and IsUnitEnemy(u,GetOwningPlayer(GetTriggerUnit()))        
        set u = null        
        return ok    
    endfunction 

     private function Light_Conditions takes nothing returns boolean
          return GetSpellAbilityId() == SPELL_ID
     endfunction

     private function Light_Actions takes nothing returns nothing
          local unit      C     = GetSpellAbilityUnit()
          local location  CL    = GetUnitLoc(C)
          local real      CR    = GetUnitX(C)
          local real      RC    = GetUnitY(C)
          local rect      R     = RectFromCenterSizeBJ(CL,Real6,Real6)
          local player    Y     = GetOwningPlayer(C)
          local integer   Level = GetUnitAbilityLevel(C,SPELL_ID)
          local integer   Index
          local real      X1    = CR + Real5 * Cos(Real1*bj_DEGTORAD)
          local real      X2    = CR + Real5 * Cos(Real2*bj_DEGTORAD)
          local real      X3    = CR + Real5 * Cos(Real3*bj_DEGTORAD)
          local real      X4    = CR + Real5 * Cos(Real4*bj_DEGTORAD)
          local real      Y1    = RC + Real5 * Sin(Real1*bj_DEGTORAD)
          local real      Y2    = RC + Real5 * Sin(Real2*bj_DEGTORAD)
          local real      Y3    = RC + Real5 * Sin(Real3*bj_DEGTORAD)
          local real      Y4    = RC + Real5 * Sin(Real4*bj_DEGTORAD)
          local real      Z1    = GetUnitFlyHeight(C)+Real7
          local real      Z2    = GetUnitFlyHeight(C)+Real8
          local lightning array L
          local real      M1
          local real      M2
          local real      X5
          local real      Y5
          local integer   P     =1
          local real Damage = DAMBASE * Level
          local location  M
          local integer   PE    =30*Level
          local unit      U
          local group     G = CreateGroup()
          set L[0]    = AddLightning(Lightning,true,X1,Y1,X2,Y2)
          set L[1]    = AddLightning(Lightning,true,X2,Y2,X3,Y3)
          set L[2]    = AddLightning(Lightning,true,X3,Y3,X4,Y4)
          set L[3]    = AddLightning(Lightning,true,X4,Y4,X1,Y1)
          set L[4]    = AddLightningEx(Lightning,true,X1,Y1,0,X1,Y1,Z1)
          set L[5]    = AddLightningEx(Lightning,true,X2,Y2,0,X2,Y2,Z1)
          set L[6]    = AddLightningEx(Lightning,true,X3,Y3,0,X3,Y3,Z1)
          set L[7]    = AddLightningEx(Lightning,true,X4,Y4,0,X4,Y4,Z1)
          set L[8]    = AddLightningEx(Lightning,true,X1,Y1,Z1,X2,Y2,Z1)
          set L[9]    = AddLightningEx(Lightning,true,X2,Y2,Z1,X3,Y3,Z1)
          set L[10]   = AddLightningEx(Lightning,true,X3,Y3,Z1,X4,Y4,Z1)
          set L[11]   = AddLightningEx(Lightning,true,X4,Y4,Z1,X1,Y1,Z1)
          set L[12]   = AddLightningEx(Lightning,true,X1,Y1,Z1,CR,RC,Z2)
          set L[13]   = AddLightningEx(Lightning,true,X2,Y2,Z1,CR,RC,Z2)
          set L[14]   = AddLightningEx(Lightning,true,X3,Y3,Z1,CR,RC,Z2)
          set L[15]   = AddLightningEx(Lightning,true,X4,Y4,Z1,CR,RC,Z2)
          set L[16]   = AddLightningEx(Lightning,true,X1,Y1,0,CR,RC,Z2)
          set L[17]   = AddLightningEx(Lightning,true,X2,Y2,0,CR,RC,Z2)
          set L[18]   = AddLightningEx(Lightning,true,X3,Y3,0,CR,RC,Z2)
          set L[19]   = AddLightningEx(Lightning,true,X4,Y4,0,CR,RC,Z2)
          call GroupEnumUnitsInRange(G,CR,RC,Real6,BOOL)
          loop
               exitwhen P>PE
               set M = GetRandomLocInRect(R)
               call DestroyEffect(AddSpecialEffectLoc(Effect1,M))
               set M = GetRandomLocInRect(R)
               call DestroyEffect(AddSpecialEffectLoc(Effect1,M))
               set M = GetRandomLocInRect(R)
               call DestroyEffect(AddSpecialEffectLoc(Effect1,M))
               set M = GetRandomLocInRect(R)
               call DestroyEffect(AddSpecialEffectLoc(Effect1,M))
               call RemoveLocation(M)      
               call TriggerSleepAction(.3)
               set P=P+1
          endloop
          loop
               set U = FirstOfGroup(G)
               exitwhen U==null
               call GroupRemoveUnit(G,U)
               call UnitDamageTarget(C,U,Damage,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
          endloop
          call RemoveRect(R)
          set P = 0
          loop
               exitwhen P==20
               call DestroyLightning(L)
               set P = P+1
          endloop
          call DestroyGroup(G)
          set C=null
     endfunction

//===========================================================================
     private function InitTrig_Light takes nothing returns nothing
          local trigger I = CreateTrigger()
          call TriggerRegisterAnyUnitEventBJ(I,EVENT_PLAYER_UNIT_SPELL_CAST)
          call TriggerAddCondition(I,Condition(function Light_Conditions))
          call TriggerAddAction(I,function Light_Actions)
          set I=null
          call Preload(Effect1)
          set BOOL = Filter(function FilterFunc)
     endfunction
endscope


Updates
V1.01
Changed the lightning effects to make a octogon instead of a square, and changed one of the effects to something else, it looks really diffrent now.
Next ver.
V1.02
I now use X and Y to get the correct areas, now its faster. I renamed the constants to something understandable
V1.03
I made lightning and Light more interesting, now that my newfound knowlege of lightning effects. Light now has a cube with an intesecting point of lights in the middle. Lightning now creates an octogon with a point over the casters location were lightnings meet.
V1.04
Gave some attention to Fire, still working on damaging units, but its coming along so far. *Had to re-update. forgot to remove lightnings in fire
V1.05
After many months of debugging, cursing, breaking things, and a useless thread, I have added damage, fixed all the bugs with the lightnings, and made things alittle less chaotic to look at.


Keywords:
Fire, Light, Lightning
Contents

Coolty44's Spell Effects V1.00 (Map)

Reviews
17:28, 3rd Jun 2009 hvo-busterkomo: First of all, I've changed the category from JASS to vJASS. Now on to the actual content. 1. Since your spells are scoped, you should make the functions private. 2. You should really name your constants...

Moderator

M

Moderator

17:28, 3rd Jun 2009
hvo-busterkomo:
First of all, I've changed the category from JASS to vJASS. Now on to the actual content.

1. Since your spells are scoped, you should make the functions private.
2. You should really name your constants better. R1, R2, E, etc.. is pretty hard to understand.
3. Avoid the use of locations. Coordinates are faster, and generally cleaner to work with.
4. While the effects looked cool visually, the effect on the game was lacking. You shouldn't be using immolation to deal your damage.

Besides those flaws, it's leak free and MUI. Approved with a 2/5 rating.
 
Level 2
Joined
Apr 29, 2009
Messages
8
Nice effects but the light spell is laggy due to the fact it creates to much special effects.
 
Level 17
Joined
Mar 17, 2009
Messages
1,350
[-]

1. Special Effects are neither smooth nor creative


2. Tooltips could be better.


3. Spam of actions, couldn't you use loops?


4. Spell names could have been more creative.


5. Usage of BJ Functions


6. Destroying map initialization triggers that run only once in the game is usually better:
  • See everything
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Visibility - Disable fog of war
      • Visibility - Disable black mask
      • Custom script: call DestroyTrigger(GetTriggeringTrigger())


[+]

7. Documentation provided.
 
5. Usage of BJ Functions

I used them in my system, too
Why is it bad to use them?
(I know nothing about JASS)

however I agree with him that spamming effects isn't very creative
(however they fit to each other very well)
my pc is very good but my frames per second ( enter "/fps" ingame to see them (under the clock)) dropped to 20 when I casted the spell with the healinganimation 2-3 times
the fiery one isn't that laggy but still not very good
the one with the lightnings was fine
 
Level 17
Joined
Mar 17, 2009
Messages
1,350
Yeah i forgot to mention the fps thing in my criticism.
Mine dropped to 20 when I casted it only once.

Some tutorials explain why BJ's are bad.
I would have explained if i really knew JASS, but all I know are a few scripts...

And D4RK_G4ND4LF, just so you know, when you're using GUI you cannot escape from the usage of BJ's. So don't worry about that until you're into JASS
 
Level 12
Joined
Jan 6, 2009
Messages
848
According to the screens, the basic shape of your SFX are Squares. You could be a little maore creative you know, like using a hexagon on one of the spells, or maybe make a pentagram on the other. Just a little tip from a friendly person :)

~PsychoNerdial
 
Level 12
Joined
Dec 10, 2008
Messages
850
According to the screens, the basic shape of your SFX are Squares. You could be a little maore creative you know, like using a hexagon on one of the spells, or maybe make a pentagram on the other. Just a little tip from a friendly person :)

~PsychoNerdial

Eerr.. those aren't creative either to me, I mean if you can make it, what stops others from using it too? I can't think of many shapes that I havn't seen before, but I will try to add a unique touch to the shapes.

@the BJ thing... BJ's are bad becuase most of them call a native function, so they call a function, and then that function runs... so if you think about it, (and this isn't probably right, but for examples purpose..) GetUnitLocBJ would call GetUnitLoc, so in essence it's easier to write GetUnitLoc then to call a function to call it.

@msaeed28. Your 2nd and fourth negative points seem EXTREMLY invalide. The chances of somebody using the tooltip and name dicrectly from a test map is probably really unlikly. Any spell I've downloaded and put into a map has had a completly diffrent tooltip and normally a diffrent name.

And I do use loops, from my experience adding another loop to the inside of a loop in JASS doesn't do the job right. #6. Well I've read around that destroying triggers causes problems, unless your able to do it. And every JASS spell I've looked at and leanred from NEVER destroyed a Init trigger.
 
Level 12
Joined
Jan 6, 2009
Messages
848
@Coolty44:
I'm just saying that you could something more than just plain squares... I never said that pentagrams were creative, nor hexagons. What i mean is that a little variation never hurts ;)
 
Level 12
Joined
Dec 10, 2008
Messages
850
I think it only happens when it is updated and its more then 3 pages back, I updated another one of my spells awhile ago and it was on the second page and didnt move forward, but this one was farther back. I think it does happen automaticly based on position
 
Level 16
Joined
Feb 22, 2006
Messages
960
Ok here my small review:

Those are really simple spells which could be done without JNGP.
The usage of effects is ok. I don't mind about tooltip , if I would use this spells I would rewrite them...So that was the "good" part of my review...

Your script... ok what should I say, I don't like it I'll explain why:

First of all let's start with the init functions of your spells...
JASS:
 scope Light initializer InitTrig_Light
//some functions

function InitTrig_Light takes nothing returns nothing
          local trigger I = CreateTrigger()
          call TriggerRegisterAnyUnitEventBJ(I, EVENT_PLAYER_UNIT_SPELL_CAST )
          call TriggerAddCondition(I, Condition( function Light_Conditions ) )
          call TriggerAddAction(I, function Light_Actions )
          set I=null
          call Preload(E)
          call Preload(L)
     endfunction
endscope

so the idea behind the initializer parameter for the scope is, that you can give your init function any name... but you choosed InitTrig_Light without "private function" the result is that this function is initialized 2 times, you can simply test it by write a BJDebugMsg in it... just make the functions private
or rename them.

Then, you use too many BJ-functions, they are inefficient ... try to use coordinates instead of locations, then you can avoid using BJs.

It's good that you destroy all locations and lightnings BUT, if you destroy also null them (also the unit variabels).

Use the vantages JassHelper grants you and try to comment your functions etc. for people who don't know jass or want to learn jass.

All in all I would say, it's 2.5/5 there are many parts which need improvement.
The idea isn't the best, but I liked the effects

LG
Schurke
 
Level 12
Joined
Dec 10, 2008
Messages
850
Thanks, I missed the private on that I guess, I must not have saved that one. I'll work on the XY stuff and try to get ride of all those BJ's. As soon as I find a tut on structs that maks sense to me I should be able to replace alot of stuff.
 
Top