1. Updated Resource Submission Rules: All model & skin resource submissions must now include an in-game screenshot. This is to help speed up the moderation process and to show how the model and/or texture looks like from the in-game camera.
    Dismiss Notice
  2. DID YOU KNOW - That you can unlock new rank icons by posting on the forums or winning contests? Click here to customize your rank or read our User Rank Policy to see a list of ranks that you can unlock. Have you won a contest and still havn't received your rank award? Then please contact the administration.
    Dismiss Notice
  3. The Lich King demands your service! We've reached the 19th edition of the Icon Contest. Come along and make some chilling servants for the one true king.
    Dismiss Notice
  4. The 4th SFX Contest has started. Be sure to participate and have a fun factor in it.
    Dismiss Notice
  5. The poll for the 21st Terraining Contest is LIVE. Be sure to check out the entries and vote for one.
    Dismiss Notice
  6. The results are out! Check them out.
    Dismiss Notice
  7. Don’t forget to sign up for the Hive Cup. There’s a 555 EUR prize pool. Sign up now!
    Dismiss Notice
  8. The Hive Workshop Cup contest results have been announced! See the maps that'll be featured in the Hive Workshop Cup tournament!
    Dismiss Notice
  9. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

Icon/Model/Spell Team Contest - Hive Member[+100 Rep]

Discussion in 'Contest Archive' started by IcemanBo, Nov 5, 2017.

Thread Status:
Not open for further replies.
  1. Kyrbi0

    Kyrbi0

    Joined:
    Jul 29, 2008
    Messages:
    7,907
    Resources:
    1
    Models:
    1
    Resources:
    1
    Well it is a third of the Contest. ; )

    But srsly, Code WIPs are so lame (and I'm a Coder). Give us some art, Art Dudes! : D
     
  2. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,501
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    I still don't get why people actually post Code WIPs. I post GIFs and pictures lol.
     
  3. Kyrbi0

    Kyrbi0

    Joined:
    Jul 29, 2008
    Messages:
    7,907
    Resources:
    1
    Models:
    1
    Resources:
    1
    Because my spells are so lame, a GIF is more underwhelming than a code pic. xD
     
  4. Chaosy

    Chaosy

    Joined:
    Jun 9, 2011
    Messages:
    10,626
    Resources:
    18
    Maps:
    1
    Spells:
    11
    Tutorials:
    6
    Resources:
    18
    Because gifs actually take effort, unlike posting code.

    And quite frankly I do not want to pour time into highlighting something sub par.
    For the final version - maybe.
     
  5. Just_Spectating

    Just_Spectating

    Joined:
    May 16, 2007
    Messages:
    7,023
    Resources:
    46
    Models:
    11
    Icons:
    9
    Skins:
    26
    Resources:
    46
    Here,
    Some base shading
     

    Attached Files:

  6. Kyrbi0

    Kyrbi0

    Joined:
    Jul 29, 2008
    Messages:
    7,907
    Resources:
    1
    Models:
    1
    Resources:
    1
    This is all great, but man I'm feeling a distinct lack of model WIPs in this thread. @JesusHipster , @Direfury , @FerSZ & others, where y'all at bros? : )
     
  7. PROXY

    PROXY

    3D Modeling Reviewer

    Joined:
    Dec 8, 2008
    Messages:
    3,447
    Resources:
    65
    Models:
    64
    Packs:
    1
    Resources:
    65
    modelwip.JPG

    Only animations and portrait to go (screen is basic stand animation).
     
  8. Mr.Goblin

    Mr.Goblin

    Art and Graphic Design Moderator

    Joined:
    May 26, 2008
    Messages:
    4,000
    Resources:
    187
    Models:
    5
    Icons:
    137
    Packs:
    4
    Skins:
    39
    Spells:
    1
    Tutorials:
    1
    Resources:
    187
    Well, because my team seems to be slightly conservative about the modeling, texturing and spells, at least let me show you a ''tease''.

    BTNMrGoblin_wip1.png BTNMrGoblin_wip2.png BTNMrGoblin_wip3.png BTNMrGoblin_wip4.png BTNMrGoblin_wip5.png

    And final icon in 64x64 with slight retouch BTNMrGoblin2.png

    I'm not a huge fan of the angle, I might redo it.
     
  9. Kyrbi0

    Kyrbi0

    Joined:
    Jul 29, 2008
    Messages:
    7,907
    Resources:
    1
    Models:
    1
    Resources:
    1
    Curse you. I want to hate you for doing yourself but it's so good. :<
     
  10. Mr.Goblin

    Mr.Goblin

    Art and Graphic Design Moderator

    Joined:
    May 26, 2008
    Messages:
    4,000
    Resources:
    187
    Models:
    5
    Icons:
    137
    Packs:
    4
    Skins:
    39
    Spells:
    1
    Tutorials:
    1
    Resources:
    187
    It's actually KILLCIDE and Direfury who rang me up saying = Dude there's a team contest, and we want to make Mr.Goblin!.
    And I was like = haha sure! have a blast!, then he was like = want to be our Icon guy? And I was like = sure why not!

    the rest is history... or will be, maybe. I don't know. will see I guess :)
     
  11. Paillan

    Paillan

    Map Reviewer

    Joined:
    Jan 22, 2011
    Messages:
    3,026
    Resources:
    2
    Models:
    2
    Resources:
    2
    moosewip.jpg

    Ladies and gentlemen, I present to you, the one, the only...

    AWZUM MOOSE!!!
     
  12. Exarch

    Exarch

    Joined:
    Mar 23, 2014
    Messages:
    157
    Resources:
    7
    Icons:
    7
    Resources:
    7
    I've been waiting for my team so we could focus on the same concept but unfortunately they couldn't find enough time.. they are working hard tho.. anyways here i got some wips for direfury.
     

    Attached Files:

    Last edited: Dec 13, 2017
  13. Kyrbi0

    Kyrbi0

    Joined:
    Jul 29, 2008
    Messages:
    7,907
    Resources:
    1
    Models:
    1
    Resources:
    1
    Looking up... Interesting choice.
     
  14. Misha

    Misha

    Joined:
    Jun 9, 2008
    Messages:
    7,206
    Resources:
    71
    Models:
    62
    Icons:
    1
    Packs:
    2
    Skins:
    4
    StarCraft II Resources:
    2
    Resources:
    71
    well that's an explosion of WIPs now xD
    @PROXY Daaayum, that rivals my Lujka char.. kinda, sorta xD
    @Mr.Goblin Ssssizzling xD
    @Paillan ... Oo ( its funny because its moose :xxd: )
    @Exarch very footman-y helm tho, but it is very fitting a rogue warrior like Dire
     
  15. MyPad

    MyPad

    Spell Reviewer

    Joined:
    May 9, 2014
    Messages:
    1,324
    Resources:
    7
    Models:
    1
    Icons:
    2
    Spells:
    3
    JASS:
    1
    Resources:
    7
    Here is the second code WIP:

    Code (vJASS):

    library OvermindSpellThree initializer Init requires /*

        *   ----------------------
        */
     AllocationAndLinks, /*
        *   ----------------------
        *
        *       -   Contains the doubly linked list and custom allocation which is preferred by the coder.
        *       -   If you don't want extends array syntax, just change AllocLinkBundle to DoubleLink
        *        
        *   ----------------------
        */
     TimerUtils,         /*
        *   ----------------------
        *
        *       -   Too lazy to create a timer that allows attachment of data.
        *
        *   ----------------------------
        */
     optional CustomFunctions, /*
        *   ----------------------------
        *
        *       -   Allows a nice not-red debug setting, but otherwise useless.
        *
        *   --------------------------------
        */
     DamageEvent,   DamageModify   /*
        *   --------------------------------
        *
        *       -   Allows the manipulation of damage
        */

     
        native UnitAlive takes unit id returns boolean
     
        ///! external ObjectMerger w3u hfoo "!000" umdl "dummy.mdx"
     
        globals
            private constant group ENUM_GROUP = CreateGroup()
            private unit enum_unit = null
        endglobals
     
        private constant function SPELL_ID takes nothing returns integer
            return 'A002'
        endfunction
     
        private constant function RAW_ID takes integer request returns integer
            if request == 0 then
                //  Returns the ID of the hatchery.
                return 'e001'
            elseif request == 1 then
                //  Returns the ID of the fel spiderlings
                return 'e002'
            endif
            return 0
        endfunction
     
        private constant function DATA takes integer request, integer level returns real
            if request == 0 then
                //  Returns the duration of the hive
                if level == 1 then
                    return 10. //50.
                elseif level == 2 then
                    return 15. //75.
                elseif level == 3 then
                    return 20. //100.
                endif
            elseif request == 1 then
                //  Returns the effective detection range.
                //  Defaults to 150.
                return 150.
            elseif request == 2 then
                //  Returns the tick rate.
                //  Defaults to 1.
                return 1.
            elseif request == 3 then
                //  Returns the amount of mana burned around the hive
                if level == 1 then
                    return 5.
                elseif level == 2 then
                    return 7.
                elseif level == 3 then
                    return 10.
                endif
            elseif request == 4 then
                //  Returns the amount of health rejuvenated by ratio.
                //  Only takes effect when used as a nydus canal.
                if level == 1 then
                    return 0.1
                elseif level == 2 then
                    return 0.12
                elseif level == 3 then
                    return 0.16
                endif
            elseif request == 5 then
                //  Returns the range field for allowing mana burn
                //  Defaults to 500.
                return 500.
            elseif request == 6 then
                //  Returns the flag for allowing the hive to be invulnerable.
                //  Defaults to true (not equal to 0.)
                return 1.
            elseif request == 7 then
                //  Returns the damage dealt when hive (simulating death or actually dying)
                if level == 1 then
                    return 85.
                elseif level == 2 then
                    return 150.
                elseif level == 3 then
                    return 220.
                endif
            elseif request == 8 then
                //  Returns half the span of the rect used to detect when the spider approaches.
                return 40.
            elseif request == 9 then
                //  Returns the speed of the missile
                //  Must correspond to the object data equivalent.
                return 1000.
            elseif request == 10 then
                //  Returns the frequency of the global timer
                //  Cannot be configured to the level of the unit
                return 1/32.
            elseif request == 11 then
                //  Returns the fade-in total duration.
                //  Cannot be configured to the level of the unit
                return 2.5
            elseif request == 12 then
                //  Returns the duration of the death animation
                //  Cannot be configured to the level of the unit
                return 5.
            endif
            return 0.
        endfunction
     
        globals
            private constant boolean REG_11_BOOL = 2.5 <= 0.
        endglobals
     
        private constant function MDL_FILE takes integer request returns string
            if request == 0 then
                return "Abilities\\Weapons\\ChimaeraAcidMissile\\ChimaeraAcidMissile.mdl"
            elseif request == 1 then
                return "Abilities\\Spells\\NightElf\\ManaBurn\\ManaBurnTarget.mdl"
            endif
            return ""
        endfunction
     
        private function real_GetDist takes real x1, real y1, real x2, real y2 returns real
            return SquareRoot((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2))
        endfunction
     
        //  Generates a module with the name DoubleLink_local. It has the property of a private module.
        //! runtextmacro link_module("local", "private")
        //! runtextmacro link_module("active", "private")
     
        private struct Data extends array
            implement AllocLinkBundle
            implement DoubleLink_local
            implement DoubleLink_active
         
            private static constant timer ACTIVE_TIMER = CreateTimer()
         
            //  Mode checker
            private integer mode
            private real mode_data
         
            /*  Part One
            *       -   This will store the unit, level, timer, target x, and target y for
            *           the successful creation of the hive. */

         
            private unit unit
            private unit hive
         
            private integer level
         
            private timer timer
         
            private real tx
            private real ty
         
            //  Part Two
            //  For speed purposes
            private static player feedback_player
         
            private real stored
            private integer eventtype
         
            //! runtextmacro search_list("private", "get", "unit", "next", "unit == id")
            //! runtextmacro search_list("private", "get_hive", "unit", "active_next", "hive == id")
         
            private method detach takes nothing returns nothing
                debug call BJDebugMsg("Attempting detach!")
                if head != 0 then
                    debug call BJDebugMsg("detach: Head of list")
                    if local_next != this then
                        debug call BJDebugMsg("detach: Search success")
                        set local_next.head = 1
                     
                        debug call BJDebugMsg(" ")
                        debug call BJDebugMsg("=============")
                        debug call BJDebugMsg("("+I2S(this)+").next = " + I2S(next))
                        debug call BJDebugMsg("("+I2S(this)+").prev = " + I2S(prev))
                        debug call BJDebugMsg("("+I2S(next)+").prev = " + I2S(next.prev))
                        debug call BJDebugMsg("("+I2S(prev)+").next = " + I2S(prev.next))
                        debug call BJDebugMsg(" ")
                     
                        call local_next.insert(next)
                     
                        debug call BJDebugMsg("("+I2S(this)+").next = " + I2S(next))
                        debug call BJDebugMsg("("+I2S(this)+").prev = " + I2S(prev))
                        debug call BJDebugMsg("("+I2S(next)+").prev = " + I2S(next.prev))
                        debug call BJDebugMsg("("+I2S(prev)+").next = " + I2S(prev.next))

                        debug call BJDebugMsg("=============")
                        debug call BJDebugMsg(" ")
                     
                    debug else
                        debug call BJDebugMsg("detach: Search fail")
                    endif
                 
                    set head = 0
                    call pop()
                endif
                call local_pop()
            endmethod
         
            private method preDestroy takes nothing returns nothing
                call detach()
                if not UnitAlive(hive) then
                    debug call BJDebugMsg("Unit is no longer alive")
                    debug call BJDebugMsg("Removing from stack")
                 
                    call RemoveUnit(hive)
                    set hive = null
                else
                    debug call BJDebugMsg("Unit is still alive")
                    debug call BJDebugMsg("Simulating Removal from stack")
                 
                    call PauseUnit(hive, true)
                    call ShowUnit(hive, false)
                 
                    call SetUnitX(hive, 0)
                    call SetUnitY(hive, 0)
                 
                    call SetWidgetLife(hive, GetUnitState(hive, UNIT_STATE_MAX_LIFE))
                    call SetUnitOwner(hive, Player(15), false)
                 
                    if not (DATA(6, 0) != 0) then
                        call SetUnitInvulnerable(hive, true)
                    endif
                endif
            endmethod
         
            private method destroy takes nothing returns nothing
                debug if active_head == 0 or mode == 1 then
                    debug call BJDebugMsg("Error: Tried to destroy an instance that has not been prepared yet")
                    debug return
                debug endif
             
                call preDestroy()
                call ReleaseTimer(timer)
             
                set unit = null
             
                set timer = null
             
                set tx = 0.
                set ty = 0.
                set mode_data = 0.
                set stored = 0.
             
                set head = 0
                set mode = 0
                set eventtype = 0
             
                call active_pop()
                call deallocate()
            endmethod
         
            //  Part two
            private static method hive_onDeathProxy takes nothing returns nothing
                local thistype this = GetTimerData(GetExpiredTimer())
                call destroy()
            endmethod
         
            private method hive_onDeath takes nothing returns nothing
                call PauseTimer(timer)
                call TimerStart(timer, DATA(12, 0), false, function thistype.hive_onDeathProxy)
             
                if eventtype != 1 then
                    debug call BJDebugMsg("Hive simulating death animation")
                    call SetUnitAnimation(hive, "death")
                debug else
                    debug call BJDebugMsg("Hive death actuated!")
                endif
            endmethod
         
            private static method hive_onDeathEvent takes nothing returns nothing
                local thistype this = get_hive(GetTriggerUnit())
             
                if this != 0 then
                    debug call BJDebugMsg("Hive death event detected!")
                 
                    set eventtype = 1
                    call hive_onDeath()
                endif
            endmethod
         
            private static method hive_onFeedback_loop takes nothing returns nothing
                local thistype this = GetTimerData(GetExpiredTimer())
             
                set feedback_player = GetOwningPlayer(hive)
                set mode_data = mode_data - DATA(2, level)
             
                if mode_data > 0. then
                    call GroupEnumUnitsInRange(ENUM_GROUP, GetUnitX(hive), GetUnitY(hive), DATA(5, level), null)            
                    loop
                        set enum_unit = FirstOfGroup(ENUM_GROUP)
                        exitwhen enum_unit == null
                     
                        if UnitAlive(enum_unit) and IsUnitEnemy(enum_unit, feedback_player) then
                            if GetUnitState(enum_unit, UNIT_STATE_MAX_MANA) != 0 then
                                call DestroyEffect(AddSpecialEffectTarget(MDL_FILE(1), enum_unit, "chest"))
                             
                                call SetUnitState(enum_unit, UNIT_STATE_MANA, GetUnitState(enum_unit, UNIT_STATE_MANA) - DATA(3, level))
                                call UnitDamageTarget(hive, enum_unit, DATA(3, level), true, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL, null)
                             
                                set stored = stored + DATA(3, level)
                            endif
                        endif
                     
                        call GroupRemoveUnit(ENUM_GROUP, enum_unit)
                    endloop
                else
                    set eventtype = 2
                    call hive_onDeath()
                endif
            endmethod
         
            private method hive_addFeedback takes nothing returns nothing
                call SetUnitInvulnerable(hive, false)
             
                if GetUnitAbilityLevel(hive, 'Aloc') == 0 then
                    call UnitApplyTimedLife(hive, 'BTLF', mode_data)
                endif
             
                call TimerStart(timer, DATA(2, level), true, function thistype.hive_onFeedback_loop)
            endmethod
         
            private static method hive_runList takes nothing returns nothing
                local thistype this = thistype(0).active_next
             
                if thistype(0).active_head == 0 then
                    call PauseTimer(ACTIVE_TIMER)
                    return
                endif
             
                loop
                    exitwhen this == 0
                    if mode == 1 then
                        call DestroyEffect(AddSpecialEffect(MDL_FILE(0), GetUnitX(hive), GetUnitY(hive)))
                     
                        static if REG_11_BOOL then
                            call SetUnitVertexColor(hive, 255, 255, 255, 255)
                         
                            set mode = 2
                            call hive_addFeedback()
                        else
                            set mode_data = mode_data + (255)*DATA(10, 0)/DATA(11, 0)
                         
                            if mode_data >= 255 then
                                call SetUnitVertexColor(hive, 255, 255, 255, 255)
                             
                                set mode = 2
                                set mode_data = DATA(0, level)
                             
                                call hive_addFeedback()
                            else
                                call SetUnitVertexColor(hive, 255, 255, 255, R2I(mode_data))
                            endif
                        endif
                 
                    elseif mode == 2 then
                 
                    endif
                 
                    set this = active_next
                endloop
            endmethod
         
            public static method init takes nothing returns nothing
                local trigger t = CreateTrigger()
             
                call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_DEATH)
                call TriggerAddCondition(t, function thistype.hive_onDeathEvent)
             
                set t = null
            endmethod
         
            //  Part one
            private method hive_create takes nothing returns nothing
                if hive == null then
                    set hive = CreateUnit(GetOwningPlayer(unit), RAW_ID(0), tx, ty, 0)
                else
                    call SetUnitOwner(hive, GetOwningPlayer(unit), true)
                    call SetUnitPosition(hive, tx, ty)
                 
                    call PauseUnit(hive, false)
                    call ShowUnit(hive, true)
                 
                    if GetUnitAbilityLevel(hive, 'Aloc') != 0 then
                        call UnitRemoveAbility(hive, 'Aloc')
                        call UnitAddAbility(hive, 'Aloc')
                    endif
                endif
             
                set mode = 1
             
                call SetUnitVertexColor(hive, 255, 255, 255, 0)
                call SetUnitInvulnerable(hive, true)
             
                if GetLocalPlayer() == GetOwningPlayer(unit) then
                    call SelectUnit(hive, true)
                    call SelectUnit(hive, false)
                endif
             
                call active_push()
                set active_head = 1
             
                if thistype(0).active_head == 0 then
                    call TimerStart(ACTIVE_TIMER, DATA(10, 0), true, function thistype.hive_runList)
                endif
             
                set thistype(0).active_head = thistype(0).active_head + 1
            endmethod
         
            private static method prepare_hive_flag takes nothing returns nothing
                local thistype this = GetTimerData(GetExpiredTimer())
             
                call hive_create()
            endmethod
         
            private method prepare_hive takes nothing returns nothing
                set timer = NewTimerEx(this)
                call TimerStart(timer, real_GetDist(GetUnitX(unit), GetUnitY(unit), GetSpellTargetX(), GetSpellTargetY())/DATA(9, 0), false, function thistype.prepare_hive_flag)
            endmethod
         
            static method create takes unit u returns thistype
                local thistype this = get(u)
                local thistype that
             
                debug call BJDebugMsg("Searching for unique instance")
                if this == 0 then
                    debug call BJDebugMsg("Search failed; allocating instance for struct creation: thistype")
                    set this = allocate()
                    set unit = u
                 
                    set level = GetUnitAbilityLevel(u, SPELL_ID())
                    set head = 1
                 
                    call push()
                    call local_insert(this)
                 
                    set tx = GetSpellTargetX()
                    set ty = GetSpellTargetY()
                 
                    call prepare_hive()
                    return this
                endif
                debug call BJDebugMsg("Search matched: thistype(" + I2S(this) + ").")
             
                set that = allocate()
                set that.unit = unit
             
                set that.level = GetUnitAbilityLevel(unit, SPELL_ID())
                call that.local_insert(this)
             
                set that.tx = GetSpellTargetX()
                set that.ty = GetSpellTargetY()
             
                call that.prepare_hive()
                return that
            endmethod
        endstruct
     
        private function OnSpellEvent takes nothing returns nothing
            if GetSpellAbilityId() == SPELL_ID() then
                call Data.create(GetTriggerUnit())
            endif
        endfunction
     
        private function Init takes nothing returns nothing
            local trigger t = CreateTrigger()
         
            call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
            call TriggerAddCondition(t, function OnSpellEvent)
         
            call ForForce(bj_FORCE_PLAYER[0], function Data.init)
            set t = null
        endfunction

    endlibrary
     


    It has a lot of debug message lines, but it will be cleared out in the final update. I'll try to post what the spell currently does.

    EDIT:

    The spell shown is actually another spell, but the main spell based on the code above is the second spell cast.

    Appending:


     
    Last edited: Dec 13, 2017
  16. Exarch

    Exarch

    Joined:
    Mar 23, 2014
    Messages:
    157
    Resources:
    7
    Icons:
    7
    Resources:
    7
    Thought it can be a good idea to go with. Im gonna see what comes as the result.

    The helmet was designed different than this but i wanted to show the face more so i.. changed it. I still want to put an evil looking helmet to him.. i'll see.
     
  17. MiniMage

    MiniMage

    Joined:
    Jun 5, 2008
    Messages:
    1,740
    Resources:
    22
    Models:
    21
    Skins:
    1
    Resources:
    22
    I always thought of this guy when I thought about personifying Direfury.

    [​IMG]
     
  18. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,180
    Resources:
    22
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    4
    JASS:
    3
    Resources:
    22
    Nice, I updated WIPS.

    @Paillan lol, I did hard to identify "awzum moose" as part of your post, and thought you left the name a secret. (thought like it's part of signature)

    @MyPad it's cool you code, but... do you even have a team concept and a modeler? ;s
     
  19. Exarch

    Exarch

    Joined:
    Mar 23, 2014
    Messages:
    157
    Resources:
    7
    Icons:
    7
    Resources:
    7
    Daamn.. das wassup
    even tho his anger looks just like him.. you imagine him as a creature? Xd
     
  20. MiniMage

    MiniMage

    Joined:
    Jun 5, 2008
    Messages:
    1,740
    Resources:
    22
    Models:
    21
    Skins:
    1
    Resources:
    22
    That's a special Dark Archon from brood wars. A Dark Archon Hero unit consisting of seven dark templars fusing under one dominant personality that named him. Ulrezaj.

    That's basically the SC2 version of a fallen templar. The SC2 equivalent of your already planned idea. XD
     
Thread Status:
Not open for further replies.