1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. We need your help nominating resources for or next YouTube video. Post here now.
    Dismiss Notice
  3. Cast your vote for the best created hero from the Hive Workshop! [POLL] +100 REP Team Contest - Hive Member
    Dismiss Notice
  4. The Terraining Mini Contest Reload #1 - Mist has began! Create a scene laden in thick fog, with only 20 doodads!
    Dismiss Notice
  5. Full steam ahead! Choose the best steampunk song at our Music Contest #9 - Poll
    Dismiss Notice
  1. Frotty
    Created by Frotty
    Dec 31, 2017

    Best of the Wurst 3


    [​IMG]
    Welcome to the third issue of our Wurstscript blog! And happy new year!

    Background: Wurst is a compiled, higher level programming language that provides powerful tools and safety for an integrated development experience in wc3 modding.

    The theme of this month's issue is "object-editing in wurstscript".


    Updates


    Due to increased usage of the Wurst Tools, several critical bugs have been found and addressed in the month of december. Make sure to download a fresh version of the setup tool and update your compiler as well as projects accordingly. We are also glad to have accepted several Pull Requests for the standard library, and are proud to present Wurstbin, a wurst pastebin. Wurst and tools also now found their final home at wurstlang.org.

    Compiler


    • A couple of severe dynamic dispatch bugs have been fixed
    • The buildmap command doesn't output maps with corrupted header anymore
    • More jass types and natives like units and groups have been implemented for compiletime
    • Compiletime hashtables now more closely mimic wc3 hashtable behaviour
    • Class array-members can now be initialized during instantiation
    • ObjData .txt output now uses the cascade operator to chain calls
    • Fixed cases where text highlight was off-by-one in vscode
    • Improved unit test console output fidelity
    • Packages ending with "Tests" are now ignored from suggestions
    • Logs from all tools are now stored at ~/.wurst/logs

    Standard Library


    • We merged several user-created pull requests, namely fixing OnUnitEnterLeave #20 issues and replacing the broken sync packages #19. Big thanks to @Sir Moriarty and @Trokkin
    • Along with the unit test improvements for the compiler the stdlib package, Wurstunit has also been refactored and Tests for groups and units have been added
    • Added more group and map convience functions
    • UnitIndexer is now more flexible and allows configuring which units to index and how to index them

    Setup App


    • The setup no longer crashes if its google network test doesn't respond with 200 OK
    • Proper logging has been added and is saved to ~/.wurst/logs/setup.log
    • Regressions regarding project updates have been fixed
    • The wurst.build file is now recognized as yaml inside vscode

    Introducing Wurstbin


    An elegant and simple way to share your wurst and jass code snippets. No login required.
    Check it out
    [​IMG]


    ObjectEditing 101


    WurstScript ships with a jass "interpreter", which can evaluate Jass code outside of wc3. This is usually done when compiling the project - hence we name the timeslot it occupies "compiletime". This is the opposite of running the map inside the game, which we refer to as "runtime".

    [​IMG]

    You can mark any function to be executed at compiletime, by simply annotating it with .
    @compiletime
    . The only caveat of this is that you can only use jass natives that have been implemented for compiletime, and you only have access to resources from your script that have also been initialized at compiletime.

    Let's look at a small example:

    Unit Generation Example


    Code (WurstScript):
    import UnitObjEditing
    @compiletime function createUnit()
        new UnitDefinition('xyz1', 'ewsp')
        ..setName("Wurst Generated Unit")

    Here we create a new UnitDefinition based on Wisp, and assign a name for it. These objectdata-classes then get transformed into the approriate binary files, in this case war3map.w3u, which are retained for runtime. Wurst is perfectly capable of managing these assets alongide units defined in the normal object editor.

    Retaining variables


    You might want to generate values at compiletime and just keep the evaluated result to use at runtime. A very common usecase for this is generating IDs.
    Let's enhance our example from above with an automatically generated id which is stored in a global:

    Code (WurstScript):
    import ObjectIdGenerator
    constant MY_UNIT_ID = compiletime(UNIT_ID_GEN.next())

    @compiletime function createUnit()
        new UnitDefinition(MY_UNIT_ID, 'ewsp')
        ..setName("Wurst Generated Unit")

    The
    UNIT_ID_GEN.next()
    call refers to an
    ObjectIdGenerator
    object that generates only safe IDs inside a range that isn't used by standard units. As you can see, you have to wrap your expression with
    compiletime()
    for it to be evaluated and retained for runtime.

    Ability generation best practises


    When generating abilities one should avoid using
    AbilityDefinition
    directly - instead, one of its subclasses, e.g. the concrete
    AbilityDefinitionFireBolt
    for Fire Bolt. This way you don't need the original id and can use the functions of the concrete subclass to modify ability-specific fields.

    Code (WurstScript):
    import AbilityObjEditing
    @compiletime function generateFireBolt()
        new AbilityDefinitionFireBolt(MY_FIREBOLT_ID)
            // This setter would not be available on
            // the base class [ljass]AbilityDefinition[/ljass].
            ..setDamage(1, 200)

    For custom triggered hero spells,
    channel
    is frequently used. Take a look at the API provided by
    ChannelAbilityPreset
    :

    Code (WurstScript):
    import ChannelAbilityPreset
    @compiletime function generateLeap()
        new ChannelAbilityPreset(MY_LEAP_ID, LEVELS, true)
            ..presetTargetTypes(Targettype.POINT)
            ..presetCooldown((int lvl) -> 30 - (level * 2))

    Notice the
    presetCooldown
    call with the lambda expression. Next to normal setters, the standard library provides
    preset*
    functions that are either convenience wrappers or take closure parameters to fill multiple levels using only one call.


    Hiveworkshop Wurst News


    • @Frotty and @Cokemonkey11 are now approved code reviewers for Wurst on hive workshop.
    • The setup app is now an approved resource in the tools section

    As always, come and chat with us on IRC or post on this thread to provide us feedback for these monthy blog posts, as well as requesting what you want us to cover next.
  2. Archian
    Created by Archian
    Dec 20, 2017
  3. Archian
    Created by Archian
    Dec 18, 2017
    signupnow.png

    So remember we hosted that [$100 Prize Pool] Melee Mapping Contest - 1v1 ? Great! Because now it's time to see the maps in action! The goal was to create a competitive 1v1 melee map that excels in terrain, dynamic and creativity, but most importantly balance. Thanks to Back2Warcraft we are now proud to announce six maps that everyone will have chance to play and compete.

    SIGN UP HERE

    More information on ESL

    Back2Warcraft will be streaming on Dec 20th 19:00 CET


    Place Reward
    • 1st 75€

    • 2nd 25€

    Warcraft III The Frozen Mapping Contest Cup

    • Date: December 20, 19:00 CET

    • Format: 1on1 Single Elimination

    • Platform: W3arena, channel: ESL Cup

    • Early rounds: Best of one

    • Quarter and Semi: Best of three

    • Finals: Best of five

    • Race: Before the veto each player must declare the race

    • Veto: Ban till best - of, pick remaining, player on the left start first

    Map pool by HIVE WORKSHOP

    You can download all the maps here!
    checkin.png
  4. Archian
    Created by Archian
    Dec 15, 2017
    HIVEISHIRING.png

    As most of you know by now, StopCampingN00b recently resigned his position as Community Manager for The Hiveworkshop. His job was to manage our social media and to promote The Hiveworkshop as best he could anywhere he could. He also managed the hive's relations to other sites and forums and brokered deals and set up affiliations. In short: He was our PR Manager, Agent and Diplomat.

    Even shorter: He was absolutely outstanding.

    And although the staff will miss him dearly, it is also important that we maintain a such position among our ranks. Therefore we would like to extend an invitation to anyone who feels a calling to make the hive the best place they can. If you love the hive, and if you want to do your part in promoting and improving this place to the best of your efforts, then Community Manager might just be the job for you.

    There are, as with any job-offer, some requirements:

    • Activity: You need to be an active member and you will need to be actively a part of the community and happenings on the site. One of your many tasks will be to promote new resources and new happenings on the site on our Facebook and Twitter accounts.
    • Photoshop Skills: A certain level of skills using any form of Photoshop tools is necessary, as you will be working to make posts that need to look good and presentable.
    • Creativity: You will need to have a creative business mentality, be able to find new ways of making the site interesting, new ways of making it accessible, and new ways of promoting it to the world.

    • Proficiency in English: You must be fluent or strongly written and conversational in the English language.
    We know it is a lot to ask of anyone, especially for being an unpaid position. But it does offer a good chance of educating yourself on the matter of how to manage public relations, how to promote something and generally how to work in a team and forward your own agenda and ideas. It's also a great thing to have on your curriculum vitae/resume, as game development companies and online communities are hiring Community Managers all the time. Food for thought!

    Please write your application in the Admin Contact forum if you are interested.

    Thank you for your time, good luck and have a nice day!

    Sign,
    The Hive Staff
  5. Hawkr
    Created by Hawkr
    Dec 4, 2017
    header 2.jpg

    Take control of the Blood Elves, Scourge, the Legion, the Dalaran Remnants, Dwarves, Trolls, Horde, Forsaken, the Cult of the Damned, Dragonmaw's Clan or the Silver Hand and battle for supremacy in the shattered land of Lordaeron in a grand strategy for the ages!

    It is with great excitement that I hereby announce the First Grand Lordaeron: The Aftermath Tournament, sponsored by Clan UoS. LTA has long proven itself to be universal, having united all communities under its banner. Therefore, I believe it is past time to organize a tournament in which all communities may clash for supremacy in this battleground and herald to the world which players are truly the best ones among us.

    All the matches will be either live casted by the streamers playing in the teams or by youtubers Zo_Om, Harald and Azothan to name a few, so all may enjoy the games and maybe learn from them.

    The organization setting will be the classical best of three, meaning that the first team to win two matches will be qualified for the following phase. The teams will be composed of six players and factions will be picked as in draft mode. Each team picks a Team Leader and when in game the agreed upon Team Leader will go first and pick a faction, then the opposing Team Leader picks two factions (to compensate for the first pick) then again first one picks one faction, the second team leader picks one and so on until all factions have been picked.

    A special thanks to @Marshmalo and all of LTA editors, who made what LTA is today and allowed us to have this tournament in the first place! And a big shout out for @Draupne and @svmns who have made a special version of the map with a PAUSE function just for this tournament!

    Sign Up:

    The team’s name, alongside its members and team leader with his contact info is signed-up through here: Grand LTA Tournament [Team Sign-Up]! If you can't create a team but still want to participate: Grand LTA Tournament [Solo Sign-Up] The period for signing up to paricipate in the tournament is open up until the 12th of December.

    Prizes:

    The winning team will receive a list of 30 games (worth about 800e) from which they'll be able to pick 6, one for each of the team members! So try hard the hardest you can!
    Rules:

    ⦁ Members are not allowed to switch, so all of those who signed up composing a team must be present to play.
    ⦁ The deadline is that, once agreed upon by both teams, a match should be played within the period of two weeks.
    ⦁ At the beginning of the match the game should be paused until all teams members have allied each other.
    ⦁ Needless to say, but map-hacking, cheating, glitches and bug abuse are strictly forbidden.
    ⦁ In case someone disconnects in the first 20 minutes of the game, a remake is to be hosted. With the exact same factions.
    ⦁ Victory condition is not set in stone, but we hope everyone will be a fair sport about losing or winning that is.
    ⦁ All replays are to be sent to @Hawkr to be reviewed. They will then be sent to be cast by one of the previously mentioned youtubers.​

    If you have any questions don't be afraid to ask either here or join us on our discord and ask for @Hawkr! And don't forget to check out the LTA forums and changelog for the latest news about the map:
    Lordaeron: The Aftermath
    Lordaeron: The Aftermath
    Latest Changelog
    Map download link

    We hope to see you on the battlefield!
    - The Warclave Staff Team