Spell Blade Barrier

meh... I've seen this before actually... More efficient method, but I've seen this done a couple times already. Maybe we're just tired of duplicates.
 
Update: v1.03
v1.02 is bugged! The effect is MUI, but the damage wasn't. I did some strange things o_O...

Why didn't that get spotted at TheHiveworkshop.... lucky I spotted while working on it in Pudge Wars :p
 
Why has the spell got such an awkward interface to use? 'Blade Barrier - Target' should be made possible by changing a value in the configurable globals, rather than having to create a struct in a different trigger. Besides that, the spell should be within a scope, not a library. And all the structs, functions and globals should be private. If the structs are private, then the individual members and methods no longer need a private prefix. I'd be interested to know why a seemingly random choice of members are actually private though. :p
Also, not every bracket, name, type and equals sign needs to be aligned. Honest.
____________

No configurable number of blades per level? No blood effects when a unit is sliced up by the blades? :(
____________

> [ljass]// Note: Some sounds cannot be played rapidly. See thread: http://www.thehelper.net/forums/forumdisplay.php?f=42[/ljass]
:confused: What thread?
____________

Sounds could be done every X seconds, not every X 'ticks'. Just add a note that it should be a multiple of the timeout, or it'll get rounded up. Makes it easier to configure. :p
____________

> [ljass]// Blade will be created at BLADE_AOE + GetRandomReal( -20, 20 )[/ljass]
BLADE_AOE? Where?
____________

Static if's don't work outside of methods or functions. So using them around a global block will never remove the global block, even if it's false.
____________

Struct members don't need to be nulled, they're globals, and are very likely to be overwritten. Those three or so instance that don't get overwritten won't impact anything in any way whatsoever. Thus, things like this as just unnecessary:
JASS:
.
            if this.fxpath != null then
                call DestroyEffect( this.fxpath )
                set this.fxpath = null
            endif

As is this:
JASS:
.
        method onDestroy takes nothing returns nothing
            set this.target = null
        endmethod

____________

JASS:
.
            if  this.originData.sec >= this.originData.dur                  or /*
            */  ( tempX*tempX+tempY*tempY ) > this.radius_45                or /*
            */  IsUnitType( this.originData.caster, UNIT_TYPE_DEAD )        or 

            <Other stuff>

                return true
            else
                if ( tempX*tempX+tempY*tempY ) > this.radius_80 then
                
                    //call Damage_Pure( this.originData.source, this.target, this.dps )
                    call UnitDamageTargetEx( this.originData.source, this.target, this.dps, true, true, /*
                    */ ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN, null )
                    static if DO_DMG_SFX then 
                        call DestroyEffect( AddSpecialEffectTarget( DAMAGE_EFFECT, this.target, "chest" ) )
                    endif
                endif
            endif
            
            return false

->
JASS:
.
            if  this.originData.sec >= this.originData.dur                  or /*
            */  ( tempX*tempX+tempY*tempY ) > this.radius_45                or /*
            */  IsUnitType( this.originData.caster, UNIT_TYPE_DEAD )        or 

            <Other stuff>

                return true
            endif
            if ( tempX*tempX+tempY*tempY ) > this.radius_80 then
                
                //call Damage_Pure( this.originData.source, this.target, this.dps )
                call UnitDamageTargetEx( this.originData.source, this.target, this.dps, true, true, /*
                */ ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN, null )
                static if DO_DMG_SFX then 
                    call DestroyEffect( AddSpecialEffectTarget( DAMAGE_EFFECT, this.target, "chest" ) )
                endif
            endif

            return false


You do this more than once. As a general guideline:

JASS:
if <conditions> then
    <actions>
    return <value>
else
    <other actions>
endif

->
JASS:
if <conditions> then
    <actions>
    return <value>
endif
<other actions>

____________

As before, I'm sure I've missed some things out, though I'll get to those later. The code also seems to be awfully long for something as simple as this, though that just may be because of the way you space things out. Good job though. :)
 
@Struct Members dont need to be nulled

No, but BlackRose thinks it's good training.

If you are a super scarer of leaking, nulling it is okay, nothing wrong with it.
 
That's the most thorough check on this resource. Ever. Though it took some time :eek: Although Pudge War's Meathook Revisted took longer I'm guessing.

'Blade Barrier - Target' should be made possible by changing a value in the configurable globals, rather than having to create a struct in a different trigger.

What if someone wants to create a Blade Barrier when they destroy a certain rune or activate some command? What do you mean by changing a value? A constant boolean? o_O

No configurable number of blades per level? No blood effects when a unit is sliced up by the blades? :(

I'll add that. Is a gigantic finale effect really needed when a unit dies from this spell? I'll add an option regardless.

Also, not every bracket, name, type and equals sign needs to be aligned. Honest.

Habit, dear sir. :thup: Dunno why :cool: I'm guessing this brought that up :cool:

JASS:
            call    SetSoundVolume( s, thistype.INLINED_VOLUME )
            call  SetSoundPosition( s, this.cx, this.cy, GetUnitFlyHeight( this.caster ) )
            call        StartSound( s )
            call KillSoundWhenDone( s )


And all the structs, functions and globals should be private. If the structs are private, then the individual members and methods no longer need a private prefix.

All of structs are private, except for BladeBarrierData??

> [ljass]// Note: Some sounds cannot be played rapidly. See thread: http://www.thehelper.net/forums/forumdisplay.php?f=42[/ljass]
What thread?

Oops. Pasted wrong link.

> [ljass]// Blade will be created at BLADE_AOE + GetRandomReal( -20, 20 )[/ljass]
BLADE_AOE? Where?

Mean't RADIUS =)

Static if's don't work outside of methods or functions. So using them around a global block will never remove the global block, even if it's false.

:eek: Really? ... ... OK :thup:

JASS:
if <conditions> then
    <actions>
    return <value>
endif
<other actions>

Eh. Does that really matter?

If you are a super scarer of leaking, nulling it is okay, nothing wrong with it.

(Setting to null takes the same speed as calling an empty function)

Is this true I want to know first :confused:
 
> If you are a super scarer of leaking, nulling it is okay, nothing wrong with it.
Making methods which do nothing except null struct members is pointless. There's as much 'wrong' with it, as there is wrong with placing random "DoNothing" calls in every other line. :p

> What if someone wants to create a Blade Barrier when they destroy a certain rune or activate some command?
If memory serves, you can make runes cast spells. So that's no problem. For 'commands', add the spell, cast it, remove it. Three short lines of code. Besides that, it's not really about length, just more about the spell following standard conventions.

> Is a gigantic finale effect really needed when a unit dies from this spell?
Not when they die, but when they're actually damaged by it. It'd be a nice (and easy) option to add, and it looks silly without blood when there are 20 blades slashing through someone.

> All of structs are private, except for BladeBarrierData??
All of them. Not all of them with exceptions. Spells shouldn't make anything public, really.

> Eh. Does that really matter?
There's no point in using an else if it can be done without one. It's nothing major though, no.
 
If memory serves, you can make runes cast spells. So that's no problem. For 'commands', add the spell, cast it, remove it. Three short lines of code. Besides that, it's not really about length, just more about the spell following standard conventions.

Eh. Made struct private and replaced with a public function:

[ljass]public function Create takes unit source, unit target, integer level returns boolean[/ljass] - Does that satisfy?

Not when they die, but when they're actually damaged by it. It'd be a nice (and easy) option to add, and it looks silly without blood when there are 20 blades slashing through someone.

o_O? It already had it? Even before the update...?

JASS:
// Where damage effects are made.
        private constant boolean DO_DMG_SFX = true
        private constant string  DMG_SFX    = "Abilities\\Spells\\Other\\Stampede\\StampedeMissileDeath.mdl"
        private constant string  DMG_LOC    = "chest"
 
> Does that satisfy?
Not really, but it'll do.

> o_O? It already had it? Even before the update...?
Ahh.. I hadn't noticed. :confused:

Approved.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • The Helper The Helper:
    Love you man so glad you are still here
  • Varine Varine:
    I live a very boring life otherwise.
  • Varine Varine:
    23AndMe is apparently looking to sell the company. I wonder what that means for all the genetic data they have. I don't have an account for The Atlantic so I can't read the rest of their news, but presumably whoever would buy the company would then have access to that, and I don't think there are any HIPPA or equivalent protections on it
  • Varine Varine:
    I'd bet it would be a treasure trove for pharmaceutical manufacturing and genetic research. I know they sold some genetic information a few years ago but they did that without identifying information attached
  • Varine Varine:
    It's be like a really boring biopunk dystopia. My TV started giving me ads when I turn it on recently (which is real fucking cool), and now I'm imagining it just being like "bioinformation says you have cancer. Get a prescription for Avastin today" and then you get connected to someone that is technically a doctor but really mostly just selling drugs to people right on your TV since they have cameras now to give you a prescription.
  • Varine Varine:
    So, buy stocks in whoever buys them would be my bet
  • Varine Varine:
    I wish I had time to keep up on things like this. My investment portfolio would probably look a bit better.
  • N Natalie the gay boss:
    So I am starting a thread.pls search how to make the teacher mad.
  • Ghan Ghan:
    Hive is 20 years old today.
  • The Helper The Helper:
    No way - holy shiznit!
  • The Helper The Helper:
    love that it is still going strong too!
  • The Helper The Helper:
    OMG I cannot handle this Natalie person I hate to do it but ban hammer activated
    +1
  • The Helper The Helper:
    I would rather not have anyone ever post then those kinds of posts
  • Varine Varine:
    lol what were they doing?
  • Varine Varine:
    3D printer is working again. Had to get a bunch of parts, cuz I forgot I kind of modded it and then never finished modding it. Turns out thermistors aren't all the same
  • Varine Varine:
    And as a result I may have gotten the hot end way too hot and caused a small fire
  • Varine Varine:
    Anyway I have a new not end and this one has the right things
  • Varine Varine:
    Although I get these really weird artifacts, I think its from my bed not being clean. Not really sure, I've seen this before though and I think cleaning the build plate fixed it. Eh, I'll figure it out, worst case scenario it rips the rest of the model off and it catches fire again
  • Varine Varine:
    I'm now realizing I could have cut out like 99% of this print and it would have been fine cuz I just need to see if a frame will fit over an LCD
  • Varine Varine:
    Oh well
  • Varine Varine:
    I'm not an engineer
  • Varine Varine:
    Although this filament is kind of expensive, I should probably be a bit more wary of that.
  • The Helper The Helper:
    I love the whole concept of 3D Printers and am very happy you have one so I can hear about them
  • The Helper The Helper:

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top