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
964
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
964
> 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
964
> 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.
  • Ghan Ghan:
    Howdy
  • Ghan Ghan:
    Still lurking
    +3
  • The Helper The Helper:
    I am great and it is fantastic to see you my friend!
    +1
  • The Helper The Helper:
    If you are new to the site please check out the Recipe and Food Forum https://www.thehelper.net/forums/recipes-and-food.220/
  • Monovertex Monovertex:
    How come you're so into recipes lately? Never saw this much interest in this topic in the old days of TH.net
  • Monovertex Monovertex:
    Hmm, how do I change my signature?
  • tom_mai78101 tom_mai78101:
    Signatures can be edit in your account profile. As for the old stuffs, I'm thinking it's because Blizzard is now under Microsoft, and because of Microsoft Xbox going the way it is, it's dreadful.
  • The Helper The Helper:
    I am not big on the recipes I am just promoting them - I use the site as a practice place promoting stuff
    +2
  • Monovertex Monovertex:
    @tom_mai78101 I must be blind. If I go on my profile I don't see any area to edit the signature; If I go to account details (settings) I don't see any signature area either.
  • The Helper The Helper:
    You can get there if you click the bell icon (alerts) and choose preferences from the bottom, signature will be in the menu on the left there https://www.thehelper.net/account/preferences
  • The Helper The Helper:
    I think I need to split the Sci/Tech news forum into 2 one for Science and one for Tech but I am hating all the moving of posts I would have to do
  • The Helper The Helper:
    What is up Old Mountain Shadow?
  • The Helper The Helper:
    Happy Thursday!
    +1
  • Varine Varine:
    Crazy how much 3d printing has come in the last few years. Sad that it's not as easily modifiable though
  • Varine Varine:
    I bought an Ender 3 during the pandemic and tinkered with it all the time. Just bought a Sovol, not as easy. I'm trying to make it use a different nozzle because I have a fuck ton of Volcanos, and they use what is basically a modified volcano that is just a smidge longer, and almost every part on this thing needs to be redone to make it work
  • Varine Varine:
    Luckily I have a 3d printer for that, I guess. But it's ridiculous. The regular volcanos are 21mm, these Sovol versions are about 23.5mm
  • Varine Varine:
    So, 2.5mm longer. But the thing that measures the bed is about 1.5mm above the nozzle, so if I swap it with a volcano then I'm 1mm behind it. So cool, new bracket to swap that, but THEN the fan shroud to direct air at the part is ALSO going to be .5mm to low, and so I need to redo that, but by doing that it is a little bit off where it should be blowing and it's throwing it at the heating block instead of the part, and fuck man
  • Varine Varine:
    I didn't realize they designed this entire thing to NOT be modded. I would have just got a fucking Bambu if I knew that, the whole point was I could fuck with this. And no one else makes shit for Sovol so I have to go through them, and they have... interesting pricing models. So I have a new extruder altogether that I'm taking apart and going to just design a whole new one to use my nozzles. Dumb design.
  • Varine Varine:
    Can't just buy a new heatblock, you need to get a whole hotend - so block, heater cartridge, thermistor, heatbreak, and nozzle. And they put this fucking paste in there so I can't take the thermistor or cartridge out with any ease, that's 30 dollars. Or you can get the whole extrudor with the direct driver AND that heatblock for like 50, but you still can't get any of it to come apart
  • Varine Varine:
    Partsbuilt has individual parts I found but they're expensive. I think I can get bits swapped around and make this work with generic shit though
  • Ghan Ghan:
    Heard Houston got hit pretty bad by storms last night. Hope all is well with TH.
  • The Helper The Helper:
    Power back on finally - all is good here no damage
    +2
  • V-SNES V-SNES:
    Happy Friday!
    +1

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top