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. We have recently started the 16th edition of the Mini Mapping Contest. The theme is mini RPG. Do check it out and have fun.
    Dismiss Notice
  4. Dismiss Notice
  5. Choose your ride to damnation in the 5th Special Effect Contest Poll.
    Dismiss Notice
  6. The winners of the 13th Techtree Contest have been announced!
    Dismiss Notice
  7. 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. Hayate

    Hayate

    Joined:
    Oct 20, 2010
    Messages:
    2,610
    Resources:
    65
    Models:
    50
    Icons:
    14
    Spells:
    1
    Resources:
    65
    Here's a gif of all the WIP for the hero portrait
     

    Attached Files:

    Last edited: Nov 29, 2017
  2. Misha

    Misha

    Joined:
    Jun 9, 2008
    Messages:
    7,225
    Resources:
    71
    Models:
    62
    Icons:
    1
    Packs:
    2
    Skins:
    4
    StarCraft II Resources:
    2
    Resources:
    71
    HTC: Apheraz Lucent my part of the team alliance is done. close the comments on it, please

    adios amigos
     
  3. Cokemonkey11

    Cokemonkey11

    Wurst Reviewer

    Joined:
    May 9, 2006
    Messages:
    3,237
    Resources:
    18
    Tools:
    1
    Maps:
    5
    Spells:
    3
    Tutorials:
    2
    JASS:
    7
    Resources:
    18
    You should tag the contest contact, @IcemanBo
     
  4. Daffa

    Daffa

    Joined:
    Jan 30, 2013
    Messages:
    7,835
    Resources:
    28
    Packs:
    1
    Maps:
    8
    Spells:
    17
    Tutorials:
    2
    Resources:
    28
    Add me as Spell Maker looking for team.
     
  5. IcemanBo

    IcemanBo

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

    Some more WIPs from teams would be good, too! ;)
     
  6. Exarch

    Exarch

    Joined:
    Mar 23, 2014
    Messages:
    157
    Resources:
    7
    Icons:
    7
    Resources:
    7
    Can you put me on the list for model and icon? Im up for hiring xd
    Question, creating your own team.. you can't be only 2 people 1 doing both work right?
     
  7. RED BARON

    RED BARON

    Joined:
    Oct 9, 2006
    Messages:
    5,185
    Resources:
    43
    Models:
    37
    Icons:
    3
    Packs:
    1
    Skins:
    1
    Maps:
    1
    Resources:
    43
    It would kinda spoil the idea of the contest if you could. I am currently doing icons, although I could also do either of the others, but its the cooperation with others and fitting things together with them that makes this interesting in my eyes.
     
  8. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,231
    Resources:
    22
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    4
    JASS:
    3
    Resources:
    22
    Team of 3 should be. BlazerKraze isn't really responsive what I could follow, but maybe you really can build one more team if you hurry up. : ) -- updated.
     
  9. MyPad

    MyPad

    Spell Reviewer

    Joined:
    May 9, 2014
    Messages:
    1,338
    Resources:
    7
    Models:
    1
    Icons:
    2
    Spells:
    3
    JASS:
    1
    Resources:
    7
    Hey, everyone. This is the first spell of the Scourge (team), [API]

    Code (vJASS):

    scope OvermindSpellOne initializer Init

        globals
            /*
                A flag that basically allows debugging of functions
            */

            private constant boolean ALLOW_DEBUG = false
        endglobals
       
        /*
            Configurable functions:
           
                These are the functions which are okay to modify:
                    RAW_ID(integer request)
                   
                    DATA(integer request, integer level)
                   
                    MDL_FILE(integer request)
                   
                SPELL_DM(int req)
                    -   A separate function that stores certain rawcodes to be used in the scope
                        By default, it returns 0. (not a float)
               
                DATA(int req, int lev)
                    -   The most versatile function, this function can essentially serve as
                        the softcoded Object Editor fields which can be tinkered with.
                        Defaults to 0f.
                       
                        Some requests indicate a default value for a requested instance. In
                        that case, if you need to modify, you can do so. However, those
                        that are not defined as defaulting to a certain value will not work
                        with your modifications.
                       
                MDL_FILE(int req)
                    -   Another versatile function, this function stores the appropriate strings
                        to be used later on.
                        Defaults to "".
        */

       
        //  Spell raw code
        private constant function SPELL_ID takes nothing returns integer
            return 'A000'
        endfunction
       
        private constant function RAW_ID takes integer request returns integer
            if request == 0 then
                //  The illusion ability to be used
                return '0000'
            endif
            return 0
        endfunction

        private constant function DATA takes integer request, integer level returns real
            if request == 0 then
                //  Returns damage dealt per tick in puddle
                if level == 1 then
                    return 25.
                elseif level == 2 then
                    return 35.
                elseif level == 3 then
                    return 50.
                endif
               
            elseif request == 1 then
                //  Returns damage dealt on puddle evaporation
                if level == 1 then
                    return 50.
                elseif level == 2 then
                    return 70.
                elseif level == 3 then
                    return 90.
                endif
               
            elseif request == 2 then
                //  Returns the tick rate of the puddle.
                //  Defaults to 1.
                return 1.
               
            elseif request == 3 then
                //  Returns the duration of the illusion
                if level == 1 then
                    return 10.
                elseif level == 2 then
                    return 15.
                elseif level == 3 then
                    return 20.
                endif
           
            elseif request == 4 then
                //  Returns damage received by the illusion
                if level == 1 then
                    return 1.25
                elseif level == 2 then
                    return 1.25
                elseif level == 3 then
                    return 1.25
                endif
           
            elseif request == 5 then
                //  Returns the speed of the bile projectile
                //  Defaults to 700.
                return 700.
           
            elseif request == 6 then
                //  Returns the tick rate of the movement
                //  Also functions as the transition rate of visibility.
                return 1/50.
           
            elseif request == 7 then
                //  Returns the duration of transition of visibility.
                return 1.5
               
            elseif request == 8 then
                //  Returns the range check for damaging nearby units
                //  Defaults to 250.
                return 250.
            endif
            return 0.
        endfunction
       
        private constant function MDL_FILE takes integer request returns string
            if request == 0 then
                //  Returns the model string of the projectile
                return "Abilities\\Weapons\\ChimaeraAcidMissile\\ChimaeraAcidMissile.mdl"
            endif      
            return ""
        endfunction
       
        /*
            Spell code:
           
                This section deals with the actual mechanics of the spell. It is not recommended
            to modify the spell code other than inserting debug messages.
           
                The class is named Data since the class is encapsulated and does not need a detailed
            name.
           
                private class Data
                    implement AllocLinkBundle
                        - Importing the coder's own allocation and linked list bundle
               
                    private static code exec_code
                        - A variable generated to prevent a trigger evaluation and duplication of functions
                       
                    private static timer EVAL
                        - A timer specifically for handling the list in the class.
                          Should not be destroyed.
                         
                    private static boolean EVAL_ACT
                        - A flag to determine if the timer is running or not.
                       
                    private integer flag
                        - A flag to determine the current phase of the spell.
                       
                    private group illusions
                        - Formerly used to store illusions, only stores a
                          dummy unit as a member
                         
                    private effect missile_fx
                        - Only used for the dummy unit as a projectile
                          model.
                         
                    readonly unit unit
                        - The actual casting unit.
                       
                    readonly unit illusion
                        - The current illusion unit.
                       
                    readonly unit target
                        - The target of the ability.
                       
                    readonly integer level
                        - An integer storing the spell level of the casting unit. (SPELL_ID()
                   
                    readonly RealGroup reals
                        - A variable that allows dynamic mapping of variables as they are requested.
                          For more info, see Essential Libraries/Real Group
                       
        */

       
        private struct Data extends array
            implement AllocLinkBundle
           
            private static code exec_code = null
           
            private static timer EVAL = null
            private static boolean EVAL_ACT = false
           
            private integer flag
            private integer flag_data
           
            private real fade
           
            private group illusions
           
            private effect missile_fx
           
            readonly unit unit
            readonly unit illusion
            readonly unit target
           
            readonly integer level
           
            readonly RealGroup reals
           
            private method destroy takes nothing returns nothing
                call reals.destroy()
                call DestroyGroup(illusions)
               
                set unit = null
                set target = null
               
                set illusions = null
               
                set reals = 0
                set level = 0
               
                set flag = 0
                set fade = 0
                set flag_data = 0
               
                call pop()
                call deallocate()
            endmethod
           
            static method get_group takes unit u returns thistype
                local thistype this = thistype(0).next
                loop
                    exitwhen this == 0 or illusion == u
                    set this = next
                endloop
                return this
            endmethod
           
            static method get takes unit u returns thistype
                local thistype this = thistype(0).next
                loop
                    exitwhen this == 0 or unit == u
                    set this = next
                endloop
                return this
            endmethod
           
            static method create takes unit u, unit targ returns thistype
                local thistype this = get(u)
               
                if this == 0 then
                    set this = allocate()
                    set unit = u
                    set target = targ
                    set level = GetUnitAbilityLevel(u, SPELL_ID())
                   
                    set fade = DATA(7, 0)
                    set flag = 1
                    set flag_data = 255
                   
                    set illusions = CreateGroup()
                   
                    call IssueImmediateOrderById(unit, 851972)
                    call PauseUnit(unit, true)
                   
                    set reals = RealGroup.create()
                    set reals.value = DATA(3, level)
                   
                    call reals.add(GetUnitX(unit))
                    call reals.add(GetUnitY(unit))
                   
                    call push()
                   
                    if not EVAL_ACT then
                        call TimerStart(EVAL, DATA(6, 0), true, exec_code)
                        set EVAL_ACT = true
                    endif
                endif
                return this
            endmethod
           
            private static unit damaged = null
            private static thistype damaged_this = 0
           
            private static method onManipulateDamage takes nothing returns nothing
                local thistype this
               
                if damaged != Damage.target then
                    set this = get_group(Damage.target)
                    set damaged_this = this
                    set damaged = Damage.target
                else
                    set this = damaged_this
                endif
               
                if this != 0 then
                    set Damage.amount = Damage.amount * DATA(4, level)
                endif
            endmethod
           
            private static unit summoned = null
            private static unit summoned_illu = null
           
            private static thistype summoned_this = 0
           
            private static method onSummon takes nothing returns nothing
                local thistype this = summoned_this
               
                call DestroyTrigger(GetTriggeringTrigger())
                set summoned = GetSummonedUnit()
               
                call UnitRemoveAbility(summoned_illu, RAW_ID(0))
                call RecycleDummy(summoned_illu)
                       
                call SelectUnit(unit, false)
               
                call ShowUnit(unit, false)
                call SetUnitInvulnerable(unit, true)
               
                call SetUnitX(summoned, GetUnitX(unit))
                call SetUnitY(summoned, GetUnitY(unit))
               
                call PauseUnit(summoned, true)
                   
                if GetLocalPlayer() == GetOwningPlayer(unit) then
                    call SelectUnit(summoned, true)
                endif
               
                set illusion = summoned
            endmethod
           
            private method timer_onTick_enum takes integer i, integer i2 returns nothing
                local player p = GetOwningPlayer(unit)
                call GroupEnumUnitsInRange(ENUM_GROUP, reals[i].value, reals[i + 1].value, DATA(8, level), null)
                //! runtextmacro FoG_start()
                    if IsUnitEnemy(enum_unit, p) and UnitAlive(enum_unit) then
                        call UnitDamageTarget(unit, enum_unit, DATA(i2, level), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNIVERSAL, null)
                    endif
                //! runtextmacro FoG_end()
                set p = null
            endmethod
           
            private static method timer_onTick takes nothing returns nothing
                local thistype this = GetTimerData(GetExpiredTimer())
                local integer i = 1
                loop
                    exitwhen i >= reals.number_count
                   
                    call DestroyEffect(AddSpecialEffect(MDL_FILE(0), reals[i].value, reals[i + 1].value))
                    call timer_onTick_enum(i, 0)
                   
                    set i = i + 2
                endloop
               
                set reals.value = reals.value - DATA(2, level)
                if reals.value <= 0 or not UnitAlive(illusion) then
                    call ReleaseTimer(GetExpiredTimer())
                    set i = 1
                    loop
                        exitwhen i >= reals.number_count
                   
                        call DestroyEffect(AddSpecialEffect(MDL_FILE(0), reals[i].value, reals[i + 1].value))
                        call timer_onTick_enum(i, 1)
                   
                        set i = i + 2
                    endloop
                    set fade = 1.5
                    set flag = 4
                   
                    call UnitDamageTarget(unit, illusion, 0, true, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL, null)
                    call KillUnit(illusion)
               
                    set illusion = null
                   
                    call PauseUnit(unit, false)
                   
                    call ShowUnit(unit, true)
                    call SetUnitInvulnerable(unit, false)
                   
                    call SetUnitX(unit, reals[3].value)
                    call SetUnitY(unit, reals[4].value)              
                   
                    call SelectUnit(unit, true)
                endif
            endmethod
           
            private method actions takes nothing returns nothing
                local trigger detector
               
                local unit illu
               
                local real r
               
                local real r1
                local real r2
                local real r3
                local real r4
               
                if flag == 1 then
                    set flag_data = Math.int_max(R2I(flag_data - (flag_data - 0)/fade*DATA(6, 0)), 0)
                    call SetUnitVertexColor(unit, 255, 255, 255, flag_data)
                   
                    set fade = fade - DATA(6, 0)
                   
                    call DestroyEffect(AddSpecialEffect(MDL_FILE(0), reals[1].value, reals[2].value))
                   
                    if fade <= 0 then
                        set illu = GetRecycledDummyAnyAngle(GetUnitX(unit), GetUnitY(unit), GetUnitFlyHeight(unit))
                        set summoned_illu = illu
                       
                        call UnitAddAbility(illu, RAW_ID(0))
                        call SetUnitOwner(illu, GetOwningPlayer(unit), true)
                       
                        set detector = CreateTrigger()
                        call TriggerRegisterUnitEvent(detector, illu, EVENT_UNIT_SUMMON)
                        call TriggerAddCondition(detector, function thistype.onSummon)
                       
                        set detector = null
                       
                        set summoned_this = this
                        call IssueTargetOrderById(illu, 852274, unit)
                       
                        set illu = null
                       
                        set fade = 0.5
                       
                        set flag = 2
                        set flag_data = 0
                       
                        set summoned = null
                       
                        call TimerStart(NewTimerEx(this), DATA(2, 0), true, function thistype.timer_onTick)
                    endif
                   
                elseif flag == 2 then
               
                    if fade == 0.5 then
                        set illu = illusion
                       
                        call SetUnitAnimation(illu, "attack")
                        call QueueUnitAnimation(illu, "stand")
                       
                        set illu = null
                    elseif fade <= 0 then
                        set illu = illusion
                       
                        call PauseUnit(illu, false)
                       
                        set illu = GetRecycledDummy(reals[1].real, reals[2].real, GetUnitFlyHeight(illu), Math.radA(reals[1].real, reals[2].real, GetUnitX(target), GetUnitY(target)))
                        set missile_fx = AddSpecialEffectTarget(MDL_FILE(0), illu, "origin")
                       
                        call GroupAddUnit(illusions, illu)
                       
                        set flag = 3
                        set fade = 0
                       
                        set illu = null
                        return
                    endif
                   
                    set fade = fade - DATA(6, 0)

                elseif flag == 3 then
               
                    set illu = FirstOfGroup(illusions)
                   
                    set r1 = GetUnitX(target)
                    set r2 = GetUnitY(target)
                   
                    set r3 = GetUnitX(illu)
                    set r4 = GetUnitY(illu)
                   
                    set r = Math.rad(GetUnitX(illu), GetUnitY(illu), r1, r2)
                   
                    if Math.dist(GetUnitX(illu), GetUnitY(illu), r1, r2) <= DATA(5, level)*DATA(6, 0) then
                        call reals.add(r1)
                        call reals.add(r2)

                        call SetUnitX(illu, reals[3].real)
                        call SetUnitY(illu, reals[4].real)
                       
                        call DestroyEffect(missile_fx)
                        set missile_fx = null
                       
                        call DummyAddRecycleTimer(illu, 1.)
                        set flag = 0
                    else
                        call SetUnitX(illu, GetUnitX(illu) + DATA(5, level)*DATA(6, 0)*Cos(r))
                        call SetUnitY(illu, GetUnitY(illu) + DATA(5, level)*DATA(6, 0)*Sin(r))
                       
                        call SetUnitFacing(illu, r*bj_RADTODEG)                  
                    endif
                   
                    set illu = null
               
                elseif flag == 4 then
                   
                    set flag_data = (R2I(flag_data - (flag_data - 255)/fade*DATA(6, 0)))
                    call SetUnitVertexColor(unit, 255, 255, 255, flag_data)
                   
                    set fade = fade - DATA(6, 0)
                   
                    call DestroyEffect(AddSpecialEffect(MDL_FILE(0), reals[1].value, reals[2].value))
                    call DestroyEffect(AddSpecialEffect(MDL_FILE(0), reals[3].value, reals[4].value))
                   
                    if fade <= 0 then
                        set flag_data = 255
                        call SetUnitVertexColor(unit, 255, 255, 255, flag_data)
                       
                        call destroy()
                    endif
                endif
            endmethod
           
            private static method timer_onLoop takes nothing returns nothing
                local thistype this = thistype(0).next
                local integer i = 0
                loop
                    exitwhen this == 0
                   
                    //  On timer loop
                    call actions()
                   
                    set this = next
                    set i = i + 1
                endloop
                if i == 0 then
                    call PauseTimer(EVAL)
                    set EVAL_ACT = false
                endif
            endmethod
           
            private static method onInit takes nothing returns nothing
                set EVAL = CreateTimer()
               
                set exec_code = function thistype.timer_onLoop
               
                call Damage.registerModifier(function thistype.onManipulateDamage)
            endmethod
        endstruct
       
        private function OnSpellEffect takes nothing returns nothing
            if GetSpellAbilityId() == SPELL_ID() then
                call Data.create(GetTriggerUnit(), GetSpellTargetUnit())
            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 OnSpellEffect)
           
            set t = null
        endfunction
    endscope
     


    There are a lot of requirements in the script, but its' a heavy price to pay in exchange for some modularity. (I still prefer custom constructors, though)
     
  10. Misha

    Misha

    Joined:
    Jun 9, 2008
    Messages:
    7,225
    Resources:
    71
    Models:
    62
    Icons:
    1
    Packs:
    2
    Skins:
    4
    StarCraft II Resources:
    2
    Resources:
    71
    @MyPad very nice to see another spell WIP :) even though i don't understand a thing there xD
     
  11. Exarch

    Exarch

    Joined:
    Mar 23, 2014
    Messages:
    157
    Resources:
    7
    Icons:
    7
    Resources:
    7
    The reason i was asking that question is becauase it can be hard to create a 3 member team especially when only 3 weeks left. Opposite to your saying i cannot do either of the other.. i only have 1 friend who can do 1 other that's the problem.
    I am hoping you can put me in a team @IcemanBo
     
  12. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,231
    Resources:
    22
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    4
    JASS:
    3
    Resources:
    22
    With @RED BARON together all aspects are potentially covered. ;)
     
  13. Exarch

    Exarch

    Joined:
    Mar 23, 2014
    Messages:
    157
    Resources:
    7
    Icons:
    7
    Resources:
    7
    If no response from @BLazeKraze
    Asking @Stefan.K if he can do the model by the time i do the icons and there is 2 people waiting for the spell?
    Any possibilities?
     
  14. RED BARON

    RED BARON

    Joined:
    Oct 9, 2006
    Messages:
    5,185
    Resources:
    43
    Models:
    37
    Icons:
    3
    Packs:
    1
    Skins:
    1
    Maps:
    1
    Resources:
    43
    Hehe, I am very glad that someone else is doing the spell work though :grin: I can do some with GUI and custom models, but any really good spell it will not be.
     
  15. FerSZ

    FerSZ

    Joined:
    May 9, 2016
    Messages:
    113
    Resources:
    13
    Models:
    13
    Resources:
    13
    @IcemanBo
    stein123 = 2D Art, stonneash = Coding, FerSZ = modeling
     
  16. venger07

    venger07

    Joined:
    Dec 21, 2010
    Messages:
    431
    Resources:
    5
    Icons:
    4
    Maps:
    1
    Resources:
    5
    I have missed a lot of replies haha.. Oh, I'm not in the model maker... I can do spells or help edit an Icon
     
  17. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,231
    Resources:
    22
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    4
    JASS:
    3
    Resources:
    22
    How many you plan do make? @venger07 oh, sorry, ok. I will remove you as modeler then.
    I wonder , @MyPad, with which team are working then. ;)

    Added. What team name/color you have?
     
  18. Hayate

    Hayate

    Joined:
    Oct 20, 2010
    Messages:
    2,610
    Resources:
    65
    Models:
    50
    Icons:
    14
    Spells:
    1
    Resources:
    65
    Spell Icon WIP1
     

    Attached Files:

  19. Stefan.K

    Stefan.K

    Joined:
    Dec 29, 2014
    Messages:
    1,477
    Resources:
    85
    Models:
    85
    Resources:
    85
    I could do the modeling job if you find us a coder.
     
  20. Exarch

    Exarch

    Joined:
    Mar 23, 2014
    Messages:
    157
    Resources:
    7
    Icons:
    7
    Resources:
    7
    Interested contestants for spells:
    @IcemanBo i think you put stein on spell and stonneash for icon instead?
     
Thread Status:
Not open for further replies.