1. Are you planning to upload your awesome spell or system to Hive? Please review the rules here.
    Dismiss Notice
  2. The poll for our 11th Music Contest is up! Help us choose the most awesome cinematic tracks by casting a vote!
    Dismiss Notice
  3. Melee Mapping contest #3 - Poll is up! Vote for the best 4v4 melee maps!
    Dismiss Notice
  4. The 30th edition of the Modeling Contest is finally up! The Portable Buildings need your attention, so come along and have a blast!
    Dismiss Notice
  5. The Aftermath has been revealed for the 19th Terraining Contest! Be sure to check out the Results and see what came out of it.
    Dismiss Notice

Swashbuckler Spellpack

Submitted by Quilnez
This bundle is marked as approved. It works and satisfies the submission rules.





[​IMG]
Swashbuckler

Cunning Hero, adept at manipulating combat situations, engaging in and disengaging out of it. Can learn Snare Trap, Persecute, Riposte, and Turmoil.

Attacks land units.



Background


The Swashbuckler, even if human by blood, wouldn't ever comply with the Alliance force and their ideals. As a rebel, he is likely to be found among bandit groups, or in tavern tables, boasting about thrilling stories he lived to tell - be them truthful or not.
Attributes:
Attribute: Starting Amount + per Level
Strength: 19 +2.20
Agility: 19 +2.30
Intelligence: 13 +1.50
Primary Attribute: Agility

Hero's Role



Even if a strongly combat oriented hero, the Swashbuckler is highly tactical. His abilities involve destabilizing the enemy troops, be it by detaining them from escape with his net traps, or provoking them into compulsive fighting. Such manipulation skills, with the addition of the ability to persecute specific enemies, make of the Swashbuckler a good hunter of the enemies' key units, or heroes.
[​IMG]

Hero's Skills:


[​IMG] Snare Trap:

Leaves a net trap on the ground to be sprung as soon an enemy enters its range. After 1 second sprung, unfolds and binds units within its radius, greatly slowing them for 75% and causing them to miss 33% of their attacks. If cast directly upon enemy units, those are immediately bound instead.

[​IMG] Persecute:

Throws a paint projectile at a unit, marking it as a persecuted target. Units targeting it have their move and attack speed raised. The mark wears off in 20 seconds.

[​IMG] Riposte: (Passive Ability)

Gives a chance of blocking and immediately retaliating an incoming melee attack. The attacker is stunned for 1 second and is dealt damage. Only front attacks can be countered this way.

[​IMG] Turmoil:

The Swashbuckler forces all units nearby to engage in a cloud of chaotic combat. Units are lost control upon, and will melee-attack random units without regard to team, with doubled attack speed and an armor reduction. Units inside Turmoil are unable to cast spells. Allies inside it evade 50% of the attacks received. Lasts 10 seconds.

=> Full spell codes here <=



Informations

Submission Content:

- W3X: Test map containing the whole entry
- MDX: Swashbuckler model
- MDX: Persecute Projectile SFX model
- MDX: Persecute Target SFX model
- MDX: Snare Trap Projectile SFX model
- MDX: Turmoil Effect SFX model
- MDX: Turmoil Target SFX model
- BLP: Swashbuckler Icon (BTN, DISBTN)
- BLP: Persecute Icon (BTN, DISBTN)
- BLP: Riposte Icon (BTN, DISBTN, PASBTN)
- BLP: Turmoil Icon (BTN, DISBTN)


Model Technical Info:

- Animation - Cast Backswing: 0.510
- Animation - Cast Point: 0.300
- Animation - Run Speed: 250
- Animation - Walk Speed: 250
- Death Time: 3.40
- Selection Scale: 1.25

- Combat - Animation Backswing: 0.600
- Combat - Animation Damage Point: 0.150

- Sound - Unit Sound Set: Bandit

[​IMG]

=> Hero model here <=


by Team CockroachesInYourPants
HappyCockroach and Quilnez
[​IMG]
Contents

[HC8] Swashbuckler.w3x (Map)

Swagbuckler (No CD No Manacost) (Map)

Reviews
KILLCIDE
Third place for Hero Contest #8. A great model by HappyCockroach that is well complimented by your abilities. Needs Fixed Snare Trap Nothing Persecute Nothing Riposte Nothing Turmoil Nothing Suggestions Keep in mind that making the struct...
  1. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,447
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    Added the Contest Entries tag :p
     
  2. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,447
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20

    Needs Fixed


    • Snare Trap
      • When you deallocate the spell instance, you should be nulling
        player owner
        as well

    • Persecute
      • local player p
        isn't nulled in static method initializeSpell

    • Riposte
      • local player p
        isn't nulled in static method initializeSpell

    • Turmoil
      • When you deallocate the spell instance, you should be nulling
        player owner
        as well
      • local player p
        isn't nulled in static method onInit for the TurmoilAI struct
      • When you deallocate a TurmoilAI instance, you should be nulling
        player owner
        as well

    Suggestions


    • Keep in mind that making the struct private doesn't automatically make the members private
    • Snare Trap
      • After your FoG loop in static method onCast, you have this:
        Code (vJASS):
        if (fog != null) then
            call GroupClear(TempGroup)
            set fog = null
        endif
        This can all be done in the same block the unit passes a filter where you set
        this.sprung = true
      • I would add an extra note that if they wanted to change the model effects for the trap or the net, they should refer to NET_DUMMY_ID & TRAP_DUMMY_ID

    • Persecute
      • I would add an extra note that if they wanted to change any of the buff effects, they should refer to the ability or the buff(s) in Object Editor

    • Riposte
      • When you are beginning to deallocate in static method onPeriodic, you have this:
        Code (vJASS):
        if (this.sfx != null) then
            call DestroyEffect(this.sfx)
            set this.sfx = null
        endif
        The only way
        this.sfx
        will ever be null is if you set it to null. Seems like a useless check to me
      • Instead of calling
        GetWorldBounds()
        , you can use
        bj_mapInitialPlayableArea


    • Turmoil
      • For the Turmoil buff in Object Editor, you have the Target Attachment Point set to "overhread"
      • You should add an extra note that the "snared" buff you are referring to in private function AllowJump is the buff ID of Snare Trap

    Status


    Awaiting Update
     
  3. Quilnez

    Quilnez

    Joined:
    Oct 12, 2011
    Messages:
    3,163
    Resources:
    37
    Icons:
    2
    Tools:
    1
    Maps:
    7
    Spells:
    21
    Tutorials:
    2
    JASS:
    4
    Resources:
    37
    Hello. Thanks for reviewing.

    Nulling player variable is not needed, but doing so is also fine. You need to null other types of agents because they can be destroyed. If an agent is destroyed and a local variable is still referencing to it, there will happen so called reference leak: the variable is referencing to an object but that object and variable are no longer accessible in any way. It's super minor but the leak will stay there until the game ends. Meanwhile, a player will never be destroyed. So reference leak won't happen in this case.

    The point of using private keyword is to make the struct (members) inaccessible for other libraries/scopes/structs. Using private struct is very useful for restricting other libraries/scopes to access that struct, but the other structs inside the same library/scope can use/access its members freely. As long as the user (or other libraries/scopes) can not access the struct at all, I think it's totally fine not to privatize its members. I have always done this thing for long actually.

    The stun struct is also used to pause/stun the caster, without special effect. But yeah, it's kind of nerdy optimization.

    They can ask me directly if they want to modify the spell. But I doubt it will ever happen.
     
  4. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,447
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    Lol no need for the reference leak explanation :p I know what they are. I sort of forgot players are treated as statics, so there is in fact no need to null them.

    No need for the encapsulation explanation either xD I know what it does. I figured that if you are going to stop the struct from being called from other scopes, you should stop other structs being able to access members they shouldn't have access too as well. Just good programming practice.

    Did you want to work on any of the suggestions or should I just approve it?

    Lol the point of notes is so that they don't have to message you. Nothing negative about putting a note about where to change the buff model or whatever so that the user doesn't waste time figuring out where.
     
  5. Quilnez

    Quilnez

    Joined:
    Oct 12, 2011
    Messages:
    3,163
    Resources:
    37
    Icons:
    2
    Tools:
    1
    Maps:
    7
    Spells:
    21
    Tutorials:
    2
    JASS:
    4
    Resources:
    37
    So... what needs fixing?
     
  6. Kyrbi0

    Kyrbi0

    Joined:
    Jul 29, 2008
    Messages:
    7,617
    Resources:
    1
    Models:
    1
    Resources:
    1
    This was just about my favorite skillet of the whole Contest; really great ideas & work, you guys.
     
  7. Quilnez

    Quilnez

    Joined:
    Oct 12, 2011
    Messages:
    3,163
    Resources:
    37
    Icons:
    2
    Tools:
    1
    Maps:
    7
    Spells:
    21
    Tutorials:
    2
    JASS:
    4
    Resources:
    37
    Uhm.. why this is still not approved yet?
     
  8. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,447
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    You didn't answer my question ergo nothing happened.
     
  9. Quilnez

    Quilnez

    Joined:
    Oct 12, 2011
    Messages:
    3,163
    Resources:
    37
    Icons:
    2
    Tools:
    1
    Maps:
    7
    Spells:
    21
    Tutorials:
    2
    JASS:
    4
    Resources:
    37
    Uhm... Why do you need user agreement just to approve stuffs? If it deserves approval (nothing needs fixing) then just approve it. Little improvements can be done later.
     
  10. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,447
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    Because I'm not your personal reviewer. I don't check your thread daily. I leave a comment and don't come back until I get a notification of an update or see that you quoted my post. With that in mind, if you dont do or say anything, neither will I.
     
  11. Quilnez

    Quilnez

    Joined:
    Oct 12, 2011
    Messages:
    3,163
    Resources:
    37
    Icons:
    2
    Tools:
    1
    Maps:
    7
    Spells:
    21
    Tutorials:
    2
    JASS:
    4
    Resources:
    37
    ...

    Then why did you ask me from the first place? >.>
    If there's nothing requires fixing then just go on and approve it, no need to ask me first. I also sometimes forgot to reply posts you know.
     
  12. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,447
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    I forget also, which is why nothing happened here after this question:

     
  13. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,447
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    Third place for Hero Contest #8. A great model by HappyCockroach that is well complimented by your abilities.

    Needs Fixed

    • Snare Trap
      • Nothing
    • Persecute
      • Nothing
    • Riposte
      • Nothing
    • Turmoil
      • Nothing

    Suggestions

    • Keep in mind that making the struct private doesn't automatically make the members private
    • Snare Trap
      • After your FoG loop in static method onCast, you have this:
        Code (vJASS):
        if (fog != null) then
            call GroupClear(TempGroup)
            set fog = null
        endif
        This can all be done in the same block the unit passes a filter where you set
        this.sprung = true
      • I would add an extra note that if they wanted to change the model effects for the trap or the net, they should refer to NET_DUMMY_ID & TRAP_DUMMY_ID
    • Persecute
      • I would add an extra note that if they wanted to change any of the buff effects, they should refer to the ability or the buff(s) in Object Editor
    • Riposte
      • When you are beginning to deallocate in static method onPeriodic, you have this:
        Code (vJASS):
        if (this.sfx != null) then
            call DestroyEffect(this.sfx)
            set this.sfx = null
        endif
        The only way
        this.sfx
        will ever be null is if you set it to null. Seems like a useless check to me
      • Instead of calling
        GetWorldBounds()
        , you can use
        bj_mapInitialPlayableArea
    • Turmoil
      • For the Turmoil buff in Object Editor, you have the Target Attachment Point set to "overhread"
      • You should add an extra note that the "snared" buff you are referring to in private function AllowJump is the buff ID of Snare Trap

    Status


    Approved
     
  14. MyPad

    MyPad

    Spell Reviewer

    Joined:
    May 9, 2014
    Messages:
    1,138
    Resources:
    3
    Models:
    1
    Icons:
    1
    JASS:
    1
    Resources:
    3
    Just correcting the status here...
     
  15. Quilnez

    Quilnez

    Joined:
    Oct 12, 2011
    Messages:
    3,163
    Resources:
    37
    Icons:
    2
    Tools:
    1
    Maps:
    7
    Spells:
    21
    Tutorials:
    2
    JASS:
    4
    Resources:
    37
    Thank you! I didn't realize the status.

    This is the most melee-ish and solid spellpack in the contest, also contains some of the most complicated spells I every made. Too bad it was banished in abyss for so long. I should've given it more attention. The model was well-appreciated tho.
     
  16. Kyrbi0

    Kyrbi0

    Joined:
    Jul 29, 2008
    Messages:
    7,617
    Resources:
    1
    Models:
    1
    Resources:
    1
    Definitely the most-melee-ish (well, tied with mine IMHO ;D), and one of my absolute favorites of the Contest. Glad to see it approved!