Spell Blade Barrier

Tyman2007

Ya Rly >.
Reaction score
74
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.
 

BlackRose

Forum User
Reaction score
239
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
 

Romek

Super Moderator
Reaction score
963
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. :)
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
@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.
 

BlackRose

Forum User
Reaction score
239
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:
 

Romek

Super Moderator
Reaction score
963
> 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.
 

BlackRose

Forum User
Reaction score
239
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"
 

Romek

Super Moderator
Reaction score
963
> 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.
  • Varine Varine:
    How can you tell the difference between real traffic and indexing or AI generation bots?
  • The Helper The Helper:
    The bots will show up as users online in the forum software but they do not show up in my stats tracking. I am sure there are bots in the stats but the way alot of the bots treat the site do not show up on the stats
  • Varine Varine:
    I want to build a filtration system for my 3d printer, and that shit is so much more complicated than I thought it would be
  • Varine Varine:
    Apparently ABS emits styrene particulates which can be like .2 micrometers, which idk if the VOC detectors I have can even catch that
  • Varine Varine:
    Anyway I need to get some of those sensors and two air pressure sensors installed before an after the filters, which I need to figure out how to calculate the necessary pressure for and I have yet to find anything that tells me how to actually do that, just the cfm ratings
  • Varine Varine:
    And then I have to set up an arduino board to read those sensors, which I also don't know very much about but I have a whole bunch of crash course things for that
  • Varine Varine:
    These sensors are also a lot more than I thought they would be. Like 5 to 10 each, idk why but I assumed they would be like 2 dollars
  • Varine Varine:
    Another issue I'm learning is that a lot of the air quality sensors don't work at very high ambient temperatures. I'm planning on heating this enclosure to like 60C or so, and that's the upper limit of their functionality
  • Varine Varine:
    Although I don't know if I need to actually actively heat it or just let the plate and hotend bring the ambient temp to whatever it will, but even then I need to figure out an exfiltration for hot air. I think I kind of know what to do but it's still fucking confusing
  • The Helper The Helper:
    Maybe you could find some of that information from AC tech - like how they detect freon and such
  • Varine Varine:
    That's mostly what I've been looking at
  • Varine Varine:
    I don't think I'm dealing with quite the same pressures though, at the very least its a significantly smaller system. For the time being I'm just going to put together a quick scrubby box though and hope it works good enough to not make my house toxic
  • Varine Varine:
    I mean I don't use this enough to pose any significant danger I don't think, but I would still rather not be throwing styrene all over the air
  • The Helper The Helper:
    New dessert added to recipes Southern Pecan Praline Cake https://www.thehelper.net/threads/recipe-southern-pecan-praline-cake.193555/
  • The Helper The Helper:
    Another bot invasion 493 members online most of them bots that do not show up on stats
  • Varine Varine:
    I'm looking at a solid 378 guests, but 3 members. Of which two are me and VSNES. The third is unlisted, which makes me think its a ghost.
    +1
  • The Helper The Helper:
    Some members choose invisibility mode
    +1
  • The Helper The Helper:
    I bitch about Xenforo sometimes but it really is full featured you just have to really know what you are doing to get the most out of it.
  • The Helper The Helper:
    It is just not easy to fix styles and customize but it definitely can be done
  • The Helper The Helper:
    I do know this - xenforo dropped the ball by not keeping the vbulletin reputation comments as a feature. The loss of the Reputation comments data when we switched to Xenforo really was the death knell for the site when it came to all the users that left. I know I missed it so much and I got way less interested in the site when that feature was gone and I run the site.
  • Blackveiled Blackveiled:
    People love rep, lol
    +1
  • The Helper The Helper:
    The recipe today is Sloppy Joe Casserole - one of my faves LOL https://www.thehelper.net/threads/sloppy-joe-casserole-with-manwich.193585/
  • The Helper The Helper:
    Decided to put up a healthier type recipe to mix it up - Honey Garlic Shrimp Stir-Fry https://www.thehelper.net/threads/recipe-honey-garlic-shrimp-stir-fry.193595/

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top