1. Music Contest #10 - Results are finally published! Drop by to check some retro songs and congratulate the winners!
    Dismiss Notice
  2. Join Terraining Contest #19 and witness the aftermath!
    Dismiss Notice
  3. The 3rd Melee Mapping Contest is ON! Join in on a ride of a 4v4 melee experience!
    Dismiss Notice
  4. The 30th edition of the Modeling Contest is finally up! The Portable Buildings need your attention, so come along and have a blast!
    Dismiss Notice
  1. StoPCampinGn00b
    Created by StoPCampinGn00b
    Feb 21, 2018
    Rise, lurkers of Azeroth and the Hive. Patch 1.29 PTR is here!


    So to dive right into it, perhaps the biggest features include, true native widescreen support, the ability for 24 player maps, major hero balance changes, a new ladder map pool for all ladder modes, the major expansions of World Editor limits (Map size dimensions -> 480x480, object limit -> 30,000, terrain tiles -> 16, and many more limits raised), and over 90 new natives for the World Editor. If you had a hard time taking all of that in because it's absolutely crazy and packed into one loosely formatted paragraph, we can't blame you!

    Note that all of these changes are in the public test realm, meaning it has separate Warcraft 3 server and download. But don't worry, these features should hit the main server when they are tested thoroughly enough and are clear for lift off. We went over all of these massive changes in detail below.

    - Widescreen: The game now supports true widescreen; the game no longer stretches to fit a wide resolution.

    - 24 Players: Maps are able to be created and played online with up to TWENTY-FOUR players! Prepare for some map makers to go overboard with this!

    - Bug fixes: Mac client launches, clans can be created again, hosting bots and cross-realm hosting fixed.

    - Streamer/Caster API: An officially supported Streamer/Caster API that allows us to read out information about gold, lumber, food usage, APM and more when observing games live. No more need to use sketchy hacks for this!

    - Hero Balance Changes:
    - Heroes: 11 main-race heroes and 6 tavern heroes wield changes, both minor and meta changing
    - Move Speed: Nearly all heroes had their move-speed increased from 270 -> 290, some heroes had durations toned down, possibly making for slightly faster gameplay
    - Buff: Crypt Lord, Far Seer, Tauren Chieftain, Dreadlord, Firelord, Goblin Tinker, Goblin Alchemist, Dark Ranger
    - Nerf: Blademaster (damage items lesser affects critical strike multiplier)
    - Adjust: Mountain King, Keeper of the Grove, Warden, Paladin
    - Map Pools: All ladder mode map pools (1v1, 2v2, 3v3, 4v4, and FFA) have been updated with vanilla maps and edited(LV) vanilla maps. See the full map pool list and specific balance details in the full patch notes linked at the bottom.

    - World Editor limit expansions: These raised limits speak for themselves. Go crazy modders!
    - Object limit increased to 30,000
    - Map dimension size limit increased to 480 x 480
    - Tile set limit increased to 16
    - Max execution number increased to 1666666
    - Max food limit increased to 999
    - Max resource limit increased to 9999999
    - Array size increased from 8192 to 32768
    - Over 90 New Natives: New natives add an array of new possibilities and more control in the editor. @Kam with the help of our users also pioneered the discussion in a Blizzard producer update.
    - Full control over special effects : scale, rotate, pitch and more! Say goodbye to dummy units for missiles systems or effect systems.
    - Enhanced control over abilities, items and units.
    - Even responses to mouse actions.​

    FULL PATCH NOTES AND PTR DOWNLOAD: https://us.battle.net/forums/en/bnet/topic/20762056755
    Editor changes: https://us.battle.net/forums/en/bnet/topic/20761976724
    Map Pool / Balance changes: https://us.battle.net/forums/en/bnet/topic/20762006793

    Hive bug report thread: [Feedback] Compiled List of 1.29 Bugs & Issues

    UPDATE: Warcraft 3 Invitational
    In the light of the recent news, Blizzard has decided to set up a giga-event for Wacraft 3 e-sport. Many old-school players are getting together to play on the new patch at Blizzard HQ. Be sure to watch the event on Back2Warcraft stream the 27th and 28th of February.

    We hope that you guys are just as ecstatic for this patch and the future of Warcraft 3 as we are. And as always, please make sure to provide feedback regarding all these PTR updates so we can see them in great shape when they hit live on the main servers. If there's anything you'd like to share or report, please do so respectfully below, patch discussion, or in the Blizzard forums. Thank you everyone for being so passionate about this game and hopefully this will spark something more :)

    Amazing image design credited to the one and only: @Wareditor
  2. Wareditor
    Created by Wareditor
    Feb 10, 2018

    HiveWE is a fully custom open-source 3rd party World Editor
    Created by eejin


    While HiveWE's end goal is to be a fully functional replacement and improvement of the original World Editor, the current features are limited. However, a lot of work has been put into the infrastructure to make this possible. Now that the basics are there implementing new features should be less of a lengthy process. So with this being a bit of a beta there are some limitations.

    • Open and view Warcraft III: The Frozen Throne maps (not RoC yet)
    • Pathing Brush: Edit the pathing map and save it. Now you can just draw straight on the pathing map saving you lots of time and your map will load quicker too be, because you dont have to place pathing blockers anymore.

    From the rocks being unbuildable to being both unwalkable and unbuildable in 10 seconds!

    There are some other creative things you can do too like making cliffs walkable, or an underwater map

    • Slow with lots of doodads (10.000+)
    • Doodad rendering is not 100% accurate (teamglow, billboards, etc)
    • Does not render units
    • Does not render ramps


    So what’s next? Obviously removing the current limitations is a priority so that even bigger maps can be worked on with a cinematic 24 fps. After that some more features concerning pathing and some rudimentary terrain editing.

    Here is a video of Retera explaining why this is the future with a neat exemple:


    Modifying the existing World Editor, is a bit like glueing a spoiler onto a crappy car versus building a race car from the ground up.

    Most of the extra functionality that JNGP or WEX offers is integrated using memory hacks, and while being very useful does feel a little glued on. A fully custom editor like this will allow us to do all kinds of new and exciting things such as editing the pathing map or increasing the limits on all kinds of things like the amount of cliffs.

    There’s a long road ahead for HiveWE to someday fully replace the original World Editor, but until then you will get to enjoy a lot of additional features too. Feel like you could help? Then drop by in the Hiveworkshop Discord or submit a Pull Request to our Github.

    * * *

    This wouldn't have been possible without the incredible work of eejin and the help of Ghostwolf with deciphering the warcraft formats and general guidance. Without him this would have taken many times as long. Also many thanks to the rest of the community for all the help.

  3. Frotty
    Created by Frotty
    Feb 1, 2018

    Best of the Wurst 4


    In this fourth issue of our blog we look at wurstscript's start into 2018, and our roadmap. Once again we're excited to mention that users within our awesome community are getting involved and contribute to the wurst.

    The theme for this months code snippet is unit testing in wurst.

    WurstScript, or Wurst for short, aims to be a completely integrated wc3 modding solution, with a focus on higher level programming and IDE experience, without sacrificing efficiency of the generated map script.


    • The
      command now uses
      if it is present, which can improve loading time. The game executable detection has also been improved.
    • Removed obsolete temp file creation when handling MPQ files, which prevents permission problems on certain systems.
    • Compiletime mocks added for
      , enabling them to be ued in object editing and unit tests.
    • The compiletime implementation of
      now returns values identical to those at runtime, thanks to @LeP
    • We merged many awesome pull requests for the standard library (#23, #25, #26, #27, #28, #30, #31, #33, #34, #35, #36, #37, #38, #41, #42)
    • We have made some improvements to our continuous integration process, so standard library changes, and pull requests to it are more seamless and powerful.
    • Wurst's underlying mpq library JMPQ has been updated to support pkware decompression and file-less data extraction.
    • The Wc3libs have been updated as well, providing WTS support and Jass's
    *Note*: The showcase is now official - you should submit your wurst maps for a chance in the spotlight!

    2018 Roadmap

    Our main goals for this year are:

    • Enhance
      and the setup tool to allow more complete and seamless map compilation. In detail:
      • Support configuring
      • Provide a seamles API for running external tools before or after map builds
      • Make the setup tools fully functional from the commandline
    • Reach 100+ github repos to become a supported language on Github Linguist. We need you to publish your wurst repos on Github!
    • Implement most Jass natives/types for compiletime. Mainly for unit-testing wc3-specific code.
    • Refine, extend, and unit test the standard library.

    Unit Testing in Warcraft 3


    Preamble: The 'unit' in unit testing does not refer to wc3 units - rather, a unit is an individual piece of source code that is being tested.

    Tests allow you to verify the behaviour of your code outside of warcraft 3 at compiletime. Instead of the game interpreting your generated Jass code, Wurst interprets it and can therefore assert correctness and find errors in code, before they happen in the game.

    The major benefit of a unit test is that it can cover most imaginable behaviours, even those that rarely happens inside the game, easily, and without wasting time executing such behaviours inside the game.

    One of the caveats of unit testing is that compiletime jass interpretation depends on the completeness and correctness of the wurst compiler that is performing the testing instead of the warcraft engine. Wurst does not implement every native, and since we don't know the inner workings of wc3, it can't emulate everything identically.

    There are many benefits of unit testing overall, such as:
    • Prove that your code does what it's supposed to do.
    • Help you improve and understand your code through by to break it.
    • Make big changes to your codebase and verify that everything still works.
    • Inherently reduce the number of bugs.

    The easiest units to test are the ones that don't include warcraft specific elements. Here are some condensed example unit tests for our data structures, arithmetics and string manipulation from the standard library.

    Code (WurstScript):
    @Test function testAdd()
        new HashList<int>..add(5).get(0).assertEquals(5)

    @Test function linearVecTest()
        let v = linear(vec2(3,4), vec2(6,2), 0.5)

    @Test function testJoin()
        new LinkedList<string>()..add("this")..add("is")..add("a")..add("string")
        .joinBy(" ").assertEquals("this is a string")

    Writing Unit Tests

    To make any function a test, just annotate it with
    . All functions with this annotation will then be recognized by wurst. This doesn't limit the function in any way and it could theoretically still be used inside your code and not exclusivly as test, however that is not recommended.

    A unit test consists of two parts - the execution of the to be tested code and an assertion, that compares the actual result with an expected value.
    You can find the assert functions inside the

    The most simple example is an arithmetic test, because we can easily find out the expected value. E.g.

    Code (WurstScript):
    @Test function example()
        let actual = (10 .squared()) * 6
        let expected = 600
    As you can see, we calculate what we want to test and then assert that the value is what we expect it to be.

    Running Unit Tests

    In VScode, use F1 to open the task prompt and enter "run test" and choose one of the options.

    You can see the result inside the Output tab.


    And that's it! You are now a testing guru. We hope you enjoyed reading this, and we look forward to next month's blog post wherein we'll take a practical look at composing visually beautiful spells in wurst.
  4. Wareditor
    Created by Wareditor
    Jan 21, 2018
    Today we are announcing two new Hosted Projects!
    The Legends of Arkain Series & Island Troll Tribes!



    Legends of Arkain is a singleplayer campaign series focusing on RTS elements with various factions waging war on each other. It is up to you, the player, to choose your side. Step forth! The great nations and personalities of Arkain await you.

    Island Troll Tribes combines survival and PvP melee combat in a fight to the death for domination of the islands. Players can join together on teams of up to six players per tribe, or even go head to head. You need to fight for survival against the environment and enemy trolls while gathering resources to build up your strength.

    * * *

    This is my first post as a Community Manager. For those who don't know me, I have been on the Hive for years because of my deep love for Warcraft 3. Two years ago, I started mapping again and since then I have been coming here daily. As unexcepted as it was for me, I am really glad to have become part of the staff. I have been enjoying this community for years and it's time to give back. Let's have a great time together!
    Yours truly,
  5. Frotty
    Created by Frotty
    Dec 31, 2017

    Best of the Wurst 3

    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".


    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.


    • 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

    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".


    You can mark any function to be executed at compiletime, by simply annotating it with .
    . 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")

    call refers to an
    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
    for it to be evaluated and retained for runtime.

    Ability generation best practises

    When generating abilities one should avoid using
    directly - instead, one of its subclasses, e.g. the concrete
    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,
    is frequently used. Take a look at the API provided by

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

    Notice the
    call with the lambda expression. Next to normal setters, the standard library provides
    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.