1. The contestants were to create water structures for the 20th Terraining Contest. Choose one in the public poll!
    Dismiss Notice
  2. Join other hivers in a friendly concept-art contest. The contestants have to create a genie coming out of its container. We wish you the best of luck!
    Dismiss Notice
  3. The Melee Mapping Contest #4: 2v2 - Results are out! Step by to congratulate the winners!
    Dismiss Notice
  4. We're hosting the 15th Mini-Mapping Contest with YouTuber Abelhawk! The contestants are to create a custom map that uses the hidden content within Warcraft 3 or is inspired by any of the many secrets within the game.
    Dismiss Notice
  5. Check out the Staff job openings thread.
    Dismiss Notice

Convert

Discussion in 'Requests' started by X3n0nX, Dec 11, 2009.

  1. X3n0nX

    X3n0nX

    Joined:
    Aug 1, 2009
    Messages:
    159
    Resources:
    0
    Resources:
    0
    Hey, I could just ask if someone can convert this to GUI? (Its vJASS)

    Code (vJASS):
    [HIDDEN="System"]library_once CamSystem initializer Init

        globals
            //How much higher you are.
            private constant real HEIGHT_OFFSET = 400
            //The distance you have to your unit. Negative values also work.
            private constant real DISTANCE = 300
            //The angle on which you look.
            private constant real ANGLE_OF_ATTACK = 330
            //Yeah. Dunno, don't change it.
            private constant real FIELD_OF_VIEW = 100
            //When the angle starts to change when you're walking down cliffs.
            private constant real ANGLE_CHANGE_Z = 200
            //The angle which get's applied when pressed right or left. (Facing+Angle)
            private constant real ANGLE = 30
            //Interval on how often the move timer get's executed.
            private constant real INTERVAL = 0.01
            //How long the camera functions take up to apply.
            private constant real UPDATE_TIME = 0.2
            //Should the current target should be the current selection?
            private constant boolean ON_SELECT = true
            //Disable if you do not want the key movement
            private constant boolean KEY_MOVEMENT = true
            //Default values which will apply when you switch the system off
            private constant real DEFAULT_ZOFFSET = 0
            private constant real DEFAULT_AOA = 304
            private constant real DEFAULT_DISTANCE= 1650
            private constant real DEFAULT_ROTATION= 90
            //Values used for the multiboard.
            private constant integer DEFAULT_RED = 50
            private constant integer DEFAULT_GREEN = 50
            private constant integer DEFAULT_BLUE = 50
            private constant integer SELECTED_RED = 0
            private constant integer SELECTED_GREEN = 100
            private constant integer SELECTED_BLUE = 0
            private constant string ARROW_COLOR = "|cffffffff"
        endglobals

        //This get's automaticly executed at the map initialization.
        //! textmacro CAM_INIT_TRIGGER
            call Cam.create(0)
            call Animation.create('O000', 6)
            call Animation.create('hfoo', 6)
            call Animation.create('hgry', 3)
        //! endtextmacro

        globals
            private location zloc = Location(0,0)
            private sound Error = CreateSoundFromLabel("InterfaceError", false, false, false, 10, 10)
            private multiboard array saved
            private multiboard array currentmb
            private boolean array show
        endglobals

        private function UnitCanMove takes unit u returns boolean
            return not IsUnitType(u, UNIT_TYPE_DEAD) and not IsUnitPaused(u) and not (GetUnitAbilityLevel(u, 'Bens') > 0) and not (GetUnitAbilityLevel(u, 'Bena') > 0) and not (GetUnitAbilityLevel(u, 'Beng') > 0) and not (GetUnitAbilityLevel(u, 'BSTN') > 0) and not (GetUnitAbilityLevel(u, 'BPSE') > 0)
        endfunction

        struct Cam
            integer owner
            unit current
            boolean up
            boolean down
            boolean right
            boolean left
            boolean playanim
            boolean enabled = true

            real offset = HEIGHT_OFFSET
            real distance = DISTANCE
            real aoa = ANGLE_OF_ATTACK
            real angle = 0

            static integer array TimerData
            static integer array TriggerData
            static thistype array Data

            static method create takes integer owner returns thistype
                local thistype this = thistype.allocate()
                local timer t = CreateTimer()
                local timer at = CreateTimer()
                local timer ct = CreateTimer()
                local trigger trg

                set .owner = owner
                set .current = null

                //! textmacro CAM_REGISTER_TRIGGER takes KEY, FUNCTION
                set trg = CreateTrigger()
                call TriggerRegisterPlayerEvent(trg, Player(owner), EVENT_PLAYER_ARROW_$KEY$)
                call TriggerAddAction(trg, function thistype.$FUNCTION$)
                set .TriggerData[GetHandleId(trg)-0x100000] = this
                //! endtextmacro
                    //! runtextmacro CAM_REGISTER_TRIGGER("UP_DOWN", "UpButtonPress")
                    //! runtextmacro CAM_REGISTER_TRIGGER("UP_UP", "UpButtonRelease")

                    //! runtextmacro CAM_REGISTER_TRIGGER("DOWN_DOWN", "DownButtonPress")
                    //! runtextmacro CAM_REGISTER_TRIGGER("DOWN_UP", "DownButtonRelease")

                    //! runtextmacro CAM_REGISTER_TRIGGER("RIGHT_DOWN", "RightButtonPress")
                    //! runtextmacro CAM_REGISTER_TRIGGER("RIGHT_UP", "RightButtonRelease")

                    //! runtextmacro CAM_REGISTER_TRIGGER("LEFT_DOWN", "LeftButtonPress")
                    //! runtextmacro CAM_REGISTER_TRIGGER("LEFT_UP", "LeftButtonRelease")

                set trg = CreateTrigger()
                call TriggerRegisterPlayerUnitEvent(trg, Player(owner), EVENT_PLAYER_UNIT_SELECTED, null)
                call TriggerAddAction(trg, function thistype.select)
                set .TriggerData[GetHandleId(trg)-0x100000] = this

                set .TimerData[GetHandleId(t)-0x100000] = this
                call TimerStart(t, INTERVAL, true, function thistype.move)

                set .TimerData[GetHandleId(ct)-0x100000] = this
                call TimerStart(ct, INTERVAL, true, function thistype.camera)

                set .TimerData[GetHandleId(at)-0x100000] = this
                call TimerStart(at, 0.2, true, function thistype.animation)

                set .Data[.owner] = this

                return this
            endmethod

            static method switch takes integer owner returns nothing
                local thistype this = Cam.Data[owner]
                if .enabled then
                    set .enabled = false
                    set .current = null
                    if GetLocalPlayer() == Player(owner) then
                        call SetCameraField(CAMERA_FIELD_ZOFFSET, DEFAULT_ZOFFSET, UPDATE_TIME)
                        call SetCameraField(CAMERA_FIELD_TARGET_DISTANCE, DEFAULT_DISTANCE, UPDATE_TIME)
                        call SetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK, DEFAULT_AOA, UPDATE_TIME)
                        call SetCameraField(CAMERA_FIELD_ROTATION, DEFAULT_ROTATION, UPDATE_TIME)
                        call SetCameraField(CAMERA_FIELD_FIELD_OF_VIEW, FIELD_OF_VIEW, UPDATE_TIME)
                        call SetCameraField(CAMERA_FIELD_FARZ, bj_CAMERA_DEFAULT_FARZ, UPDATE_TIME)
                    endif
                else
                    set .enabled = true
                endif
            endmethod

            private static method move takes nothing returns nothing
                local thistype this = Cam.TimerData[GetHandleId(GetExpiredTimer())-0x100000]
                local real x
                local real y
                local real ox
                local real oy
                local boolean bx
                local boolean by
                if show[.owner] and KEY_MOVEMENT then
                    if .up and not .down and UnitCanMove(.current) then
                        set .playanim = true
                        set ox = GetUnitX(.current)
                        set oy = GetUnitY(.current)
                        if .right then
                            set x = GetUnitX(.current)+(GetUnitMoveSpeed(.current)*INTERVAL)*Cos((GetUnitFacing(.current)-ANGLE)*bj_DEGTORAD)
                            set y = GetUnitY(.current)+(GetUnitMoveSpeed(.current)*INTERVAL)*Sin((GetUnitFacing(.current)-ANGLE)*bj_DEGTORAD)
                        elseif .left then
                            set x = GetUnitX(.current)+(GetUnitMoveSpeed(.current)*INTERVAL)*Cos((GetUnitFacing(.current)+ANGLE)*bj_DEGTORAD)
                            set y = GetUnitY(.current)+(GetUnitMoveSpeed(.current)*INTERVAL)*Sin((GetUnitFacing(.current)+ANGLE)*bj_DEGTORAD)
                        else
                            set x = GetUnitX(.current)+(GetUnitMoveSpeed(.current)*INTERVAL)*Cos(GetUnitFacing(.current)*bj_DEGTORAD)
                            set y = GetUnitY(.current)+(GetUnitMoveSpeed(.current)*INTERVAL)*Sin(GetUnitFacing(.current)*bj_DEGTORAD)
                        endif
                        call SetUnitPosition(.current, x, y)
                        if RAbsBJ(GetUnitX(.current)-x) > 0.5 or RAbsBJ(GetUnitY(.current)-y) > 0.5 then
                            call SetUnitPosition(.current, x, oy)
                            set bx = RAbsBJ(GetUnitX(.current)-x) <= 0.5
                            call SetUnitPosition(.current, ox, y)
                            set by = RAbsBJ(GetUnitY(.current)-y) <= 0.5
                            if bx then
                                call SetUnitPosition(.current, x, oy)
                            elseif by then
                                call SetUnitPosition(.current, ox, y)
                            else
                                call SetUnitPosition(.current, x, y)
                            endif
                        endif
                    elseif .up and .down then
                        if GetLocalPlayer() == Player(.owner) then
                            call StartSound(Error)
                        endif
                        if .playanim then
                            set .playanim = false
                            call SetUnitAnimationByIndex(.current, 1)
                            call IssueImmediateOrder(.current, "stop")
                        endif
                    elseif not .up then
                        if .playanim then
                            set .playanim = false
                            call SetUnitAnimationByIndex(.current, 1)
                            call IssueImmediateOrder(.current, "stop")
                        endif
                    endif

                    if .right and not .left then
                        call SetUnitFacingTimed(.current, GetUnitFacing(.current)-ANGLE, UPDATE_TIME)
                    elseif .left and not .right then
                        call SetUnitFacingTimed(.current, GetUnitFacing(.current)+ANGLE, UPDATE_TIME)
                    elseif .right and .left then
                        if GetLocalPlayer() == Player(.owner) then
                            call StartSound(Error)
                        endif
                    endif
                endif
            endmethod

            private static method animation takes nothing returns nothing
                local thistype this = Cam.TimerData[GetHandleId(GetExpiredTimer())-0x100000]
                if .playanim then
                    call SetUnitAnimationByIndex(.current, Animation.getAnim(GetUnitTypeId(.current)))
                endif
            endmethod

            private static method camera takes nothing returns nothing
                local thistype this = Cam.TimerData[GetHandleId(GetExpiredTimer())-0x100000]
                local real z1
                local real z2
                local real angle = .aoa
                local real offset = GetCameraField(CAMERA_FIELD_ZOFFSET)+GetUnitFlyHeight(.current)+.offset-GetCameraEyePositionZ()
                if .current != null then
                    call MoveLocation(zloc, GetUnitX(.current), GetUnitY(.current))
                    set z1 = GetLocationZ(zloc)
                    call MoveLocation(zloc, GetUnitX(.current)+.distance*Cos((GetUnitFacing(.current)-180)*bj_DEGTORAD), GetUnitY(.current)+.distance*Sin((GetUnitFacing(.current)-180)*bj_DEGTORAD))
                    set z2 = GetLocationZ(zloc)

                    if z1+FIELD_OF_VIEW/2 < z2 then
                        set angle = angle-20
                        set offset = offset+z2
                    elseif z1+FIELD_OF_VIEW/2 > z2 then
                        set offset = offset+z1
                    else
                        set offset = offset+z1
                    endif

                    if GetLocalPlayer() == Player(.owner) then
                        call PanCameraToTimed(GetUnitX(.current)+.distance*Cos((GetUnitFacing(.current)-180)*bj_DEGTORAD), GetUnitY(.current)+.distance*Sin((GetUnitFacing(.current)-180)*bj_DEGTORAD), UPDATE_TIME)
                        call SetCameraField(CAMERA_FIELD_ZOFFSET, offset, UPDATE_TIME)
                        call SetCameraField(CAMERA_FIELD_TARGET_DISTANCE, .distance, UPDATE_TIME)
                        call SetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK, angle, UPDATE_TIME)
                        call SetCameraField(CAMERA_FIELD_ROTATION, GetUnitFacing(.current)+.angle, UPDATE_TIME)
                        call SetCameraField(CAMERA_FIELD_FIELD_OF_VIEW, FIELD_OF_VIEW, UPDATE_TIME)
                        call SetCameraField(CAMERA_FIELD_FARZ, bj_CAMERA_DEFAULT_FARZ, UPDATE_TIME)
                    endif
                endif
            endmethod

            private static method select takes nothing returns nothing
                local thistype this = Cam.TriggerData[GetHandleId(GetTriggeringTrigger())-0x100000]
                if GetOwningPlayer(GetTriggerUnit()) == Player(.owner) and ON_SELECT and .enabled then
                    call SetUnitAnimationByIndex(.current, 1)
                    set .current = GetTriggerUnit()
                endif
            endmethod

            //! textmacro CAM_CREATE_TRIGGERS takes NAME, VARIABLE
            private static method $NAME$ButtonPress takes nothing returns nothing
                local thistype this = Cam.TriggerData[GetHandleId(GetTriggeringTrigger())-0x100000]
                set .$VARIABLE$ = true
            endmethod
            private static method $NAME$ButtonRelease takes nothing returns nothing
                local thistype this = Cam.TriggerData[GetHandleId(GetTriggeringTrigger())-0x100000]
                set .$VARIABLE$ = false
            endmethod
            //! endtextmacro
                //! runtextmacro CAM_CREATE_TRIGGERS("Up", "up")
                //! runtextmacro CAM_CREATE_TRIGGERS("Down", "down")
                //! runtextmacro CAM_CREATE_TRIGGERS("Right", "right")
                //! runtextmacro CAM_CREATE_TRIGGERS("Left", "left")

        endstruct

        struct Animation
            integer id
            integer anim
            static hashtable hash = InitHashtable()
            static method create takes integer id, integer anim returns thistype
                local thistype this = thistype.allocate()
                set .id = id
                set .anim = anim
                call SaveInteger(.hash, id, 0, this)
                return this
            endmethod
            static method getAnim takes integer id returns integer
                local thistype this = LoadInteger(thistype.hash, id, 0)
                return .anim
            endmethod
        endstruct

        globals
            private integer array prow
        endglobals

        private function MultiboardUp takes nothing returns nothing
            local integer id = GetPlayerId(GetTriggerPlayer())
            if prow[id] >= 3 and not show[id] then
                set prow[id] = prow[id]-1
                call MultiboardSetItemColorBJ(currentmb[id], 0, prow[id]+1, DEFAULT_RED, DEFAULT_GREEN, DEFAULT_BLUE, 100)
                call MultiboardSetItemColorBJ(currentmb[id], 0, prow[id], SELECTED_RED, SELECTED_GREEN, SELECTED_BLUE, 100)

                call MultiboardSetItemValueBJ(currentmb[id], 1, prow[id]+1, "")
                call MultiboardSetItemValueBJ(currentmb[id], 1, prow[id], ARROW_COLOR+">")
            endif
        endfunction

        private function MultiboardDown takes nothing returns nothing
            local integer id = GetPlayerId(GetTriggerPlayer())
            if prow[id] <= 4 and not show[id] then
                set prow[id] = prow[id]+1
                call MultiboardSetItemColorBJ(currentmb[id], 0, prow[id]-1, DEFAULT_RED, DEFAULT_GREEN, DEFAULT_BLUE, 100)
                call MultiboardSetItemColorBJ(currentmb[id], 0, prow[id], SELECTED_RED, SELECTED_GREEN, SELECTED_BLUE, 100)

                call MultiboardSetItemValueBJ(currentmb[id], 1, prow[id]-1, "")
                call MultiboardSetItemValueBJ(currentmb[id], 1, prow[id], ARROW_COLOR+">")
            endif
        endfunction

        private function MultiboardRight takes nothing returns nothing
            local integer id = GetPlayerId(GetTriggerPlayer())
            if not show[id] then
                if prow[id] == 2 and Cam.Data[id].aoa <= 350 then
                    set Cam.Data[id].aoa = Cam.Data[id].aoa+10
                    call MultiboardSetItemValueBJ(currentmb[id], 3, 2, I2S(R2I(Cam.Data[id].aoa)))
                endif
                if prow[id] == 3 then
                    set Cam.Data[id].distance = Cam.Data[id].distance+20
                    call MultiboardSetItemValueBJ(currentmb[id], 3, 3, I2S(R2I(Cam.Data[id].distance)))
                endif
                if prow[id] == 4 then
                    set Cam.Data[id].offset = Cam.Data[id].offset+20
                    call MultiboardSetItemValueBJ(currentmb[id], 3, 4, I2S(R2I(Cam.Data[id].offset)))
                endif
                if prow[id] == 5 and Cam.Data[id].angle <= 350 then
                    set Cam.Data[id].angle = Cam.Data[id].angle+10
                    call MultiboardSetItemValueBJ(currentmb[id], 3, 5, I2S(R2I(Cam.Data[id].angle)))
                endif
            endif
        endfunction

        private function MultiboardLeft takes nothing returns nothing
            local integer id = GetPlayerId(GetTriggerPlayer())
            if not show[id] then
                if prow[id] == 2 and Cam.Data[id].aoa >= 10 then
                    set Cam.Data[id].aoa = Cam.Data[id].aoa-10
                    call MultiboardSetItemValueBJ(currentmb[id], 3, 2, I2S(R2I(Cam.Data[id].aoa)))
                endif
                if prow[id] == 3 then
                    set Cam.Data[id].distance = Cam.Data[id].distance-20
                    call MultiboardSetItemValueBJ(currentmb[id], 3, 3, I2S(R2I(Cam.Data[id].distance)))
                endif
                if prow[id] == 4 and Cam.Data[id].offset >= 20 then
                    set Cam.Data[id].offset = Cam.Data[id].offset-20
                    call MultiboardSetItemValueBJ(currentmb[id], 3, 4, I2S(R2I(Cam.Data[id].offset)))
                endif
                if prow[id] == 5 and Cam.Data[id].angle >= 10 then
                    set Cam.Data[id].angle = Cam.Data[id].angle-10
                    call MultiboardSetItemValueBJ(currentmb[id], 3, 5, I2S(R2I(Cam.Data[id].angle)))
                endif
            endif
        endfunction

        private function MultiboardSettings takes integer id returns nothing
            if show[id] then
                if bj_lastCreatedMultiboard != null and bj_lastCreatedMultiboard != currentmb[id] then
                    set saved[id] = bj_lastCreatedMultiboard
                    call MultiboardDisplay(saved[id], false)
                endif

                set currentmb[id] = CreateMultiboard()
                call MultiboardSetTitleText(currentmb[id], "Change your Cam Settings")
                call MultiboardSetColumnCount(currentmb[id], 3)
                call MultiboardSetRowCount(currentmb[id], 5)
                call MultiboardSetItemsStyle(currentmb[id], true, false)

                call MultiboardSetItemWidthBJ(currentmb[id], 1, 0, 1)
                call MultiboardSetItemWidthBJ(currentmb[id], 2, 0, 8)
                call MultiboardSetItemWidthBJ(currentmb[id], 3, 0, 6)

                call MultiboardSetItemValueBJ(currentmb[id], 2, 1, "Setting")
                call MultiboardSetItemValueBJ(currentmb[id], 3, 1, "Value")
                call MultiboardSetItemValueBJ(currentmb[id], 2, 2, "Angle")
                call MultiboardSetItemValueBJ(currentmb[id], 2, 3, "Distance")
                call MultiboardSetItemValueBJ(currentmb[id], 2, 4, "Height")
                call MultiboardSetItemValueBJ(currentmb[id], 2, 5, "Rotation")

                call MultiboardSetItemValueBJ(currentmb[id], 3, 2, I2S(R2I(Cam.Data[id].aoa)))
                call MultiboardSetItemValueBJ(currentmb[id], 3, 3, I2S(R2I(Cam.Data[id].distance)))
                call MultiboardSetItemValueBJ(currentmb[id], 3, 4, I2S(R2I(Cam.Data[id].offset)))
                call MultiboardSetItemValueBJ(currentmb[id], 3, 5, I2S(R2I(Cam.Data[id].angle)))

                call MultiboardSetItemColorBJ(currentmb[id], 0, 2, DEFAULT_RED, DEFAULT_GREEN, DEFAULT_BLUE, 100)
                call MultiboardSetItemColorBJ(currentmb[id], 0, 3, DEFAULT_RED, DEFAULT_GREEN, DEFAULT_BLUE, 100)
                call MultiboardSetItemColorBJ(currentmb[id], 0, 4, DEFAULT_RED, DEFAULT_GREEN, DEFAULT_BLUE, 100)
                call MultiboardSetItemColorBJ(currentmb[id], 0, 5, DEFAULT_RED, DEFAULT_GREEN, DEFAULT_BLUE, 100)

                call MultiboardSetItemValueBJ(currentmb[id], 1, 2, ARROW_COLOR+">")
                call MultiboardSetItemColorBJ(currentmb[id], 0, 2, SELECTED_RED, SELECTED_GREEN, SELECTED_BLUE, 100)

                set prow[id] = 2

                if GetLocalPlayer() == Player(id) then
                    call MultiboardDisplay(currentmb[id], true)
    call MultiboardMinimize(currentmb[id], false)
                endif
                set show[id] = false
            else
    if GetLocalPlayer() == Player(id) then
                    call MultiboardDisplay(currentmb[id], false)
                    call MultiboardDisplay(saved[id], true)
                endif
    set show[id] = true
            endif
        endfunction

    function CamRegisterPlayer takes integer owner returns Cam
            return Cam.create(owner)
        endfunction

    function CamSwitch takes integer owner returns nothing
            call Cam.switch(owner)
        endfunction

        function CamSetTarget takes integer owner, unit target returns nothing
            set Cam.Data[owner].current = target
        endfunction

        function CamAddAnimation takes integer id, integer anim returns Animation
            return Animation.create(id, anim)
        endfunction

        function CamToggleMultiboard takes integer owner returns nothing
            call MultiboardSettings(owner)
        endfunction

        private function Init takes nothing returns nothing
            local trigger xZ44 = CreateTrigger()
            local integer z4Q = 0 //DUDE! You never know what names someone is going to use.
            //! runtextmacro CAM_INIT_TRIGGER()
            loop
                exitwhen z4Q >= 11
                set show[z4Q] = true
                set saved[z4Q] = null
                set currentmb[z4Q] = null
                set z4Q = z4Q+1
            endloop
            set z4Q = 0
            loop
                exitwhen z4Q >= 11
                set xZ44 = CreateTrigger()
                call TriggerRegisterPlayerEvent(xZ44, Player(z4Q), EVENT_PLAYER_ARROW_DOWN_DOWN)
                call TriggerAddAction(xZ44, function MultiboardDown)
                set xZ44 = CreateTrigger()
                call TriggerRegisterPlayerEvent(xZ44, Player(z4Q), EVENT_PLAYER_ARROW_UP_DOWN)
                call TriggerAddAction(xZ44, function MultiboardUp)
                set xZ44 = CreateTrigger()
                call TriggerRegisterPlayerEvent(xZ44, Player(z4Q), EVENT_PLAYER_ARROW_RIGHT_DOWN)
                call TriggerAddAction(xZ44, function MultiboardRight)
                set xZ44 = CreateTrigger()
                call TriggerRegisterPlayerEvent(xZ44, Player(z4Q), EVENT_PLAYER_ARROW_LEFT_DOWN)
                call TriggerAddAction(xZ44, function MultiboardLeft)
                set z4Q = z4Q+1
            endloop
        endfunction

    endlibrary[/HIDDEN]


    Thanks!
     
  2. Adiktuz

    Adiktuz

    Joined:
    Oct 16, 2008
    Messages:
    9,674
    Resources:
    23
    Models:
    2
    Packs:
    1
    Maps:
    1
    Spells:
    16
    Tutorials:
    1
    JASS:
    2
    Resources:
    23
    as far as I know you cannot convert vJASS to GUI... even if its possible, you might remove some of its functionalities....
     
  3. Ironside

    Ironside

    Joined:
    Feb 3, 2009
    Messages:
    2,724
    Resources:
    4
    Maps:
    3
    Tutorials:
    1
    Resources:
    4
    I think he means convert as remake a GUI version.
     
  4. Adiktuz

    Adiktuz

    Joined:
    Oct 16, 2008
    Messages:
    9,674
    Resources:
    23
    Models:
    2
    Packs:
    1
    Maps:
    1
    Spells:
    16
    Tutorials:
    1
    JASS:
    2
    Resources:
    23
    I also think that... but don't you think its impossible without removing most of its functionalities?