widelands build20

Milestone information

Release registered:
No. Drivers cannot target bugs and blueprints to this milestone.  

Download RDF metadata


Assigned to you:
No blueprints or bugs assigned to you.
No users assigned to blueprints and bugs.
No blueprints are targeted to this milestone.
6 Fix Released

Download files for this release

After you've downloaded a file, you can verify its authenticity using its MD5 sum or signature. (How do I verify a download?)

File Description Downloads
download icon widelands-build20-macosx-10.7.dmg (md5, sig) Mac OS X 10.7 and newer Binary (64 bit) (prefer other binary if you have Mac OS >= 10.9) 19,579
last downloaded 12 days ago
download icon widelands-build20-macosx-10.9.dmg (md5, sig) Mac OS X 10.9 and newer Binary (64 bit) 23,767
last downloaded today
download icon Widelands-Build20-win_x64.exe (md5, sig) Windows Installer (64 bit) 193,257
last downloaded today
download icon Widelands-Build20-win_x86.exe (md5, sig) Windows Installer (32 bit) 18,741
last downloaded 5 weeks ago
download icon widelands-build20.tar.bz2 (md5, sig) Source package 7,261
last downloaded 24 hours ago
Total downloads: 262,605

Release notes 

The Widelands Development Team is proud to announce the immediate availability of Widelands Build 20. Widelands is a free, cross-platform economy strategy game in which players control the fate of a small tribe that can grow into a big empire, in a style of play that is unique in the open source world. Please visit our homepage at https://wl.widelands.org to learn more.

* PeerTube Trailer: https://peerwatch.xyz/videos/watch/916f3d81-c3a7-4f1a-85a7-444607f7641c
* YouTube Trailer: https://youtu.be/7BIO2qmH8y0

Since the previous release, we have implemented over 400 features, code cleanups and bug fixes. Build 20 features a new tribe – the Frisians – as well as four new campaign scenarios and a new “Barracks” building for recruiting soldiers. Also, the AI has been rewritten to use a genetic algorithm. The user interface comes with new features that make it easier to use, like map zoom, dropdown menus, a new ships list, and improved keyboard navigation. Build 20 also continues the behind the scenes cleanup, polish and modernization that was started with Build 19. There have been additional improvements to the stability and performance, as well as numerous bug-fixes.

Here are some highlights of the new features in Build 20:


* New Frisian tribe
* New “Village” starting condition
* New “Barracks” building for recruiting soldiers
* Forester/Ranger now prefers good soil, and is thus more efficient
* Scouts now spend more time near to enemy military sites
* Improved algorithm for promotion and demotion of roads
* Diverse balancing improvements and fixes

Maps, Tutorials, Campaigns & Scenarios

* 2 new missions for the Empire campaign
* 2 new missions for the new Frisians tribe
* Tweaked timings in tutorials and scenarios
* Minor fixes to the “Last Bastion” map where a player's expansion could become completely blocked across the sea
* Fixed bug in then“Crossing the Horizon” map where an artifact couldn’t be conquered by a player

Graphics & User Interface

* New Zoom feature
* New Ship Statistics window
* In building windows, see how many wares and workers are already on their way
* Update all ware priorities for a building when the Ctrl key is pressed while clicking
* New animation graphics for wheat fields, Barbarian Big Inn and Wood Hardener, Atlantean Smoker and all tribes’ resource indicators
* New menu background graphics
* New graphics for field selectors and field action tabs
* Special field selector for road building mode
* Added new information to in-game Encyclopedia and online scripting reference
* Improved keyboard navigation for tables
* Dropdown menus
* Try to show a basic error message box to the user if the graphics driver will not work with Widelands

Sounds and Music

* 6 new music tracks
* Added new sound effects and improved the sound mix
* Never play the same song twice in a row

Networking & Multiplayer
* Host internet games without opening a port in your router
* When the connection to a client in a multiplayer game is broken, the host can decide to exit or to replace the payer with an AI
* Added support for IPv6
* Increased password security by no longer storing and transmitting it in plain text
* Made debugging desyncs easier


* Extended the Lua scripting API with new functions and objects
* Added capability to add custom scenario buildings
* Allow writing and loading of campaign data, so that some scenario state can be transferred from one scenario to the next in campaigns
* Allow resetting of teams via Lua during game


* Improved reliability and performance of game and map saving and loading
* Unfortunately, we had to break savegame compatibility in version bzr8747 for an important bug fix in the economy code. So, you will not be able to load your old savegames from Build 19.


* The AI now uses a genetic algorithm
* Multiple changes and improvements to the AI logic
* New command line switches –ai_training and –auto_speed to help with AI training


* Show translation statistics next to the selected language in the Options screen
* Glossary checks for inflected languages and glossary generation with support from the Translate Toolkit (http://toolkit.translatehouse.org/).


* Animals now have categories
* Display of animals, immovables and resources can now be toggled individually
* New layout for Player menu allows the selection of random tribe
* Improved text layout for the Info tool
* Limited the editor undo function to 500 items to prevent boundless growth of memory use

Operating System Support

* Windows: Allow parallel installation of multiple Widelands versions
* Windows: Widelands is now installed into local %appdata%
* Windows: No longer write log output to installation folder
* Mac OS X: Modernized how releases are done
* Compiling: Added support for gcc7 and llvm8.
* Compiling: Support for Glbinding version 3 and Boost version 1.69

Widelands is currently fully translated > 50% into the following languages: British English, Bulgarian, Catalan, Czech, Danish, Dutch, Finnish, French, German, Hungarian, Italian, Japanese, Korean, Low German, Polish, Portuguese, Russian, Scottish Gaelic, Slovak, Spanish and Swedish. You can help with translations directly in your web browser: https://www.transifex.com/widelands/. Help for translating is available on https://wl.widelands.org/wiki/TranslatingWidelands/.

Widelands is distributed for Windows (64-bit) and Mac OS X >= 10.7 (Intel, 64-bit) and in source code. We no longer ship binary Linux packages because of the poor compatibility between Linux distributions. Instead, we try to make compiling for Linux users as easy as possible. Also, most distributions will pick up Build 20 into their repositories very quickly. Both binary and source packages are available from http://launchpad.net/widelands/build20/build-20

If you like what you see, please visit our homepage, widelands.org. You may also want to check the forums and our IRC channel, #widelands on Freenode, to arrange multiplayer games with other players.

We especially welcome every helping hand: help us find bugs, translate the game, add new scenarios or features! If you want to get even more involved in the further development of Widelands, you can meet us on the forum at https://wl.widelands.org/ or subscribe to widelands-public@lists.sf.net on http://lists.sourceforge.net/mailman/listinfo/widelands-public. Releases are also announced to widelands-announce@lists.sf.net (https://sourceforge.net/projects/widelands/lists/widelands-announce).


View the full changelog

Animations, Icons and Overlays

  - New wheatfield graphics by fraang
  - Shorten a soldier's last evade_failure animation if the soldier is about to
    die to prevent overlooping.
  - The health bar of a soldier now falls gradually during an attack instead of
  - New graphics for field selectors and field action tabs
  - Special field selector for road building mode
  - Added missing call to get_rand_anim when a soldier is dying
  - Added missing working animations for barbarians big inn and wood hardener
  - Each tribe now has individual resource indicator graphics
  - Added util to rename animation files in bulk.
  - Fixed bug #1639253: Add missing walkload animation to Atlantean smoker

Sounds and Music

  - New music tracks "Scotty the Scout", "Hypathia's Theme", "We Work in the
    Vineyards" and "Running out of Coal" by Stuart Marshall
  - New music tracks "Silkweaver's Song" and "The beauty of the flatlands" by
    Klaus Halfmann
  - Added new sound files for Barbarians Inn + Big-Inn, Empire Inn,
    Atlantean Mill, Toolsmith, Smelting-Works, all Weaving Mills, Atlantean
    Woodcutter, Sawmill, Stonecutter, Goldspinner.
  - Modified smithies sounds to dimmer versions; added tree-falling sounds,
    substituted Timber shouting with tree-falling.
  - Allocate 32 mixing channels instead of the default 8.
  - Never play the same song twice in a row
  - Improvements to sounds and the sound mix

Tutorials and Campaigns

  - 2 new missions for the Empire campaign
  - 2 new missions for the new Frisians tribe
  - Tweaked timings in tutorials and scenarios
  - Updated the Economy tutorial to match the new, enhanced encyclopedia
  - Add roads to p2 in warfare tutorial because the AI is empty
  - Fixed reveal_campaign in bar_01
  - Fixed bug #1639514: Barbarian campaign, scenario 2: yellow brother bails out
  - Fixed bug #1656192: Economy tutorial assumes window is open


  - Updated Eris to version 1.1.2 (Lua 5.3.4)
  - Changes and additions to Lua methods and objects:
    - New method player:get_produced_wares_count()
    - New object LuaMap -> LuaEconomy.
    - Added option to Lua function player:hide_fields to mark them as unexplored
    - New scripting functions for random and concentric revealing/hiding of
    - New attribute 'is_stopped' in LuaProductionSite
    - New method 'toggle_start_stop()' in LuaProductionSite
    - Added Lua method to get the type of the current game, i.e., single or
  - Changes to territorial win conditions:
    - Pulled out common code for Territorial Lord and Territorial Time.
    - Ensure that check_player_defeated is called before points are calculated.
    - New function to check whether a field is buildable.
    - Check if a player still exists before making it the winning player.
      Player will also win if there are no other players left.
    - Fixed desyncs
    - Updated documentation not to use some functions for multiplayer games
    - More precise calculation of conquerable fields to make territorial win
      conditions playable on all maps
  - Various fixes for win conditions:
    - Unified some functions for wood_gnome and collectors
    - Removed duplicated code and moved it to win_condition_functions
    - Notify only every hour, 10 minutes in the last 30 minutes
    - Move _game_over function out of the main loop.
    - Don't show points when game ended by military defeat
    - Main loop ends when time is over or only one faction is left
    - Check every second for defeated players
    - Refactor initialization of win conditions:
    - Shift calculations for territorial functions and Wood Gnome to C++
      to improve performance
    - Add immovables to the table for territory calculation
    - Expose port spaces and max caps to Lua interface
    - Fixed bug for Wood Gnome in which a destroyed player would gain infinite
      points. Also, no longer calculate score for a defeated player.
  - Remove unused parameters of message_box_objective.
  - Removed unused parameter 'req_suitability' from function
    place_building_in_region in infrastructure.lua
  - Added capability to add custom scenario buildings
  - Allow writing and loading of campaign data, so that some scenario state can
    be transferred from one scenario to the next in campaigns.
  - Do not broadcast Lua coroutine error messages to empty player slots.
    Also, use richtext_escape on them.
  - Orthogonal design for mapobject program names
  - Fix unpersisting of LuaImmovableDescription for tribe immovables.
  - Safeguard to avoid desyncs when using send_message() from ui.lua
  - Add parameter to send_message() to avoid an error
  - Fixed a memory leak in persistence.cc
  - Fixed bug #1670065: Random tree growth can block building sites needed to
                        progress in scenario
  - Fixed bug #1688655: lua func "place_building_in_region" not work for mines
  - Fixed bug #1815283: Nil value in Territorial Lord
  - Fixed bug #1790456: The final message in collectors doesn't show the points
                        of all players anymore


  - Map tags: Added "1v1" to Firegames, Islands at war and The Pass through
    the Mountains. Removed "unbalanced" from The Pass through the Mountains.
  - Moved hint texts from map descriptions to hints for the Last Bastion and
    Rendez-vous maps.
  - Increased maximum number of players from 8 to 16, to be used for testing
  - Minor fixes to Last Bastion map where a player's expansion could become
    completely blocked across the sea
  - Fixed bug in Crossing the Horizon map where an artifact couldn't be
    conquered by a player
  - Fixed desyncs in Smugglers scenario
  - Allow random player tribes in scenarios


  - Old scenario save games will no longer work due to changes to the map
    scrolling functions.
  - Broke savegame compatibility in version bzr8747
  - Savehandler: Avoid reading config more than once per game
  - Corrupt zip files now appear as "incompatible" on game loading/saving
    screens. This fixes stack-buffer-overflows.
  - Fixed bugs with missing files/folders in savegames by creating a temporary
    map save on game start
  - Improved error checking in filesystem functions
  - In Load/Save menu for games/replays:
    - All deletion errors are caught, player gets a message.
    - When deleting multiplayer replays, also the corresponding syncstream file
      is deleted.
    - After deleting replays, the table now respects the Show Filenames setting.
  - In Save menu for maps:
    - Errors when trying to create a directory are now caught, player gets a
    - Directory creation now doesn't allow names with map extensions, because
      the game would just try to interpret them as maps and not show as
      directories. A tooltip is shown.
    - Directory creation can now also be triggered by pressing Enter in the name
      edit box.
  - Other file errors are caught and logged:
    - Syncstream deletion in SyncWrapper destructor
    - In Map::get_correct_loader
    - File deletion/renaming in GameClient::handle_packet
  - Introduced a new class to robustly handle saving of files (incl. dealing
    with backups, handling errors, etc.) and using it whenever maps/games are
    being saved.
  - Remove superfluous "postload" call from replay
  - Added validity checks for S2 map headers to avoid crashes when preloading
    invalid S2 map files
  - Shift calculation of map fields relevant to win conditions from Lua to C++.
    This gives us a huge performance boost during saveloading those win
  - Fixed bug #1678987: Endless autosave cycles when a save takes longer than
                        the autosave interval, and inefficient statistics saving
  - Fixed bug #1746270: Unable to rename rolling autosave
  - Fixed bug #1798812: Saving a game from replay does not show up in load game


  - The AI now uses a genetic algorithm. The genetic parameters are trained and
    then kept in .wai files.
  - New command line switch --ai_training: Dumps new AI files in home folder and
    uses higher mutation ratios
  - New command line switch --auto_speed: Activates auto-speed in multiplayer
  - Various refactorings of AI hints
  - Multiple changes to the logic
  - Improvements to training sites
  - Add support for productionsites that are also supporting site to the AI.
    One productionsite can now support multiple wares/productionsites.
  - Allow resetting of teams via LUA during game
  - Improved selection of which fields to build something on
  - Improved identification of unconnectable regions based on walking algorithm.
    Used to keep AI from wasting attempts to build something there.
  - AI now splits and counts mineable fileds per resource/mine type and uses it
    for decision making, ignoring inaccessible fields in the process
  - When looking for the nearest buildable spot, the AI will accept mineable
    fields also. This affects willingness to expand when there are no buildable
    spots nearby, but some mines can be conquered by a new militarysite.
  - AI now calculates military strength based on the actual init.lua files
    rather than hard-coding the values. This also removes the tribe name
    restriction for modders.
  - When considering a quarry, the AI makes sure there is at least one rock in
    the vicinity. Same for fishers and fish.
  - Improved ship exploration decisions for AI.
  - AI now considers whether possible sea direction leads to unknown territories
  - AI also continues exploring when the last port is lost to prevent crashes.
  - Since the AI can handle only 1 expedition at a time, any extra expeditions
    are canceled
  - Prohibit seafaring buildings for AI on non-seafaring maps. AI can still
    handle ships and shipyards that already exist when a map does not allow
    seafaring at the moment.
  - AI now scans entire map for portspaces
  - Fixed endless loop in DefaultAI::dispensable_road_test
  - Added one well to the atlantean basic economy, as water is needed
    for crucial spidercloth production
  - Replaced logic_rand() with std::rand() in seafaring code of AI to fix
    desyncs in network gaming
  - Fixed bug #1724073: AI crashes when some AI slots are empty


  - New Frisian tribe
  - New "Village" starting condition
  - New "Barracks" (casern) building for recruiting soldiers. Soldiers are no
    longer created by warehouses. Production sites can now have workers as input
    to consume.
  - Started implementing new "Market" building with a Barbarian prototype.
    Not functional yet.
  - Balancing: Halved needed experience for Barbarian brewer and blacksmith
  - Balancing: Buffed Barbarian and Empire soldiers
  - Balancing: Added more trainers to headquarters at game start
  - Balancing: Removed meat default target quantity for Barbarians and
  - Balancing: Lowered productivity threshold for lumberjacks to 60%.
  - Balancing: Depleted Atlantean crystal (and iron) mines work slightly better
               when depleted
  - Balancing: Improvements to various production sites' logic
  - The worker program "plant" no longer takes "tribe:" as a parameter;
    immovables are now identified via their attributes only, and both world and
    tribe immovables are searched. As a side effect, tribe immovables can now
    have terrain affinity.
  - Forester/Ranger now prefers good soil, and is thus more efficient
  - Make the scout aware of nearby military sites. The scout now switches
    between random walking and doing an excursion to enemy military sites
  - When a Fish Breeder's fishing grounds are full, display a special tooltip
    instead of sending an "Out of Resources" message
  - When a warehouse is destroyed, the maximum number of fleeing units is now
    limited to 500 per unit type
  - Only cancel expedition if there is a reachable portdock. Show a warning
    message to owner.
  - Shifted ware hotspot definition from WorkerDescr to CarrierDescr
  - Fixed a bug where higher-level workers wouldn't occupy lower-level workers'
    working position slots in productionsites
  - The port now conquers every location where its military influence is higher
    than the influence of other players. This fixes a segfault when all
    potential portdock fields are owned by another player, but there is a
    portdock location available where the player owning the port has highest
  - Fixed bug in collectors script where a broken message was sent after the
    game ended
  - Check for visibility of military buildings before permitting attack. This
    solves a problem with impregnable castles.
  - Improved algorithm for promotion and demotion of roads
  - Removed hardcoding for resources
  - New return value no_stats for work programs
  - Tweaked production programs for shipyards
  - Balancing: All Smelting Works, Furnaces, Smokeries, Recycling Center,
    Atlantean and Frisian Toolsmithies, Taverns, Inns and Drinking Halls no
    longer waste time if a ware is missing and they have to skip a program
  - Balancing: Tweaked programs for Weapon/Armor producing buildings
  - Balancing: Imperial Armor Smithy produces 1 more Helm per run to balance the
    amount of armor types for training
  - Balancing: Changed the order of programs in the Atlantean Toolsmithy
  - Balancing: Gave the Barbarian Deep Gold Mine the same stats as the Deep Iron
  - Increased the area where the map is recalculated after conquering by 1.
    This prevents buildings from sitting between borders.
  - Fixed heap-use-after-free in fleet while processing
    EditorGameBase::cleanup_objects() when ship has already been deleted
  - Allow return on dismantle values without buildcost
  - Fix desyncs caused by floating point arithmetic in terrain affinity
  - Reset economy serial in Game constructor. This fixes desyncs in replays.
  - Stop ware dropoff when the target building has been destroyed. This fixes a
    crash when the enemy conquers a militarysite near a warehouse.
  - Cancel Worker::fetchfromflag when the building is destroyed/dismantled/
    enhanced to prevent crashes
  - Fixed bug #963799: shortsighted shipwright (ship in pond)
  - Fixed bug #1611323: ships can be built in non-floating spaces (shipyard)
  - Fixed bug #1636966: Segfault in battle
  - Fixed bug #1637386: Militarysites warn about allies
  - Fixed bug #1639444: Workers with wares inside ships can crash the game
  - Fixed bug #1643209: No-cost workers are not removed correctly
  - Fixed bug #1643284: Ships of a fleet can have the same name
  - Fixed bug #1656671: Wares are not always transported to construction site
  - Fixed bug #1658456: Imperials: Soldier target quantity not changeable
  - Fixed bug #1749586: Fish breeder can't breed fish if the game is loaded
                        after all fish is caught

User Interface

  - Maps can now be zoomed using the mouse wheel or keyboard keys: CTRL+, CTRL-
    to in-/decrease, and CTRL+0 to reset. This also removes 0 as a possible
    landmark number.
  - All map transitions like jumping in messages and in the buildings menu are
    now animated. New command line option "animate_map_panning".
  - Moved smooth animation of cursor and MapView from Lua into C++. This fixes
    the transitions in tutorials, which were broken when zoomed.
  - Show census information on destroyed building with the former building's
  - Added supplementary warning to enhancement message for military sites.
  - Fixed statistics label overlap. Ware statistics now update their plot range
  - Removed quick navigation with '.' and ','.
  - The game summary window now restores the original desired speed when it's
  - Productionsites no longer close their window when the stop/start button is
  - Minimized construction windows no longer get maximized when the construction
    is finished.
  - Window is no longer closed on enhance or dismantle.
  - Let the user select multiple entries in a table using Ctrl/Shift + Click
    (multiple/range selection) and Ctrl+A (select all) where appropriate.
  - Implemented textual and pictorial dropdown menus. Dropdowns are used for win
    condition and multiplayer tribe selection in the launch game screens.
  - Fullscreen background images are now tiled rather than stretched.
  - Stopped fullscreen toggle from flickering.
  - The following menus now relayout themselves when fullscreen mode is toggled:
    main, multiplayer, single player, about, map selection, options, load game,
    save game.
  - For multiplayer game setup, use dropdowns instead of buttons to select
    player options
  - Improved scrollbar and table header layout.
  - Remove buttons from economy options window for spectators
  - Improvements to StoryMessageBox, keyboard navigation and UI focusing
  - Updating all ware priorities of a building when CTRL is pressed while
  - Sorting IRC users behind the players in the lobby
  - Replaced get_key_state with SDL_GetModState() to fix keyboard mappings.
  - Actionconfirm now uses Box layout and resizes according to text size.
  - Display loading times on the console while loading the tribes.
  - Simplified the UI::Align enum and various alignment-related cleanup and
  - Replaced booleans in UI::Box::add() with enum classes for better readability
  - Converted all text to new font renderer. Formatting functions for the new
    renderer live in data/scripting/richtext.lua
  - A more principled fix to dangling object pointers in the UI using Optr<>
  - Building Statistics now only show relevant buildings
  - Building Statistics now show "under construction" navigation for buildings
    being enhanced
  - Show in-game clock in release builds too
  - In multiplayer games, scroll to starting position when a game is loaded
  - New Ship Statistics window
  - Bugfixes to multiplayer dropdowns
  - Use Lua to define background and button styles
    - Background images and colors are now defined in data/templates/default
    - Combine common background graphics with color overlays
    - Added StyleManager class to load and access backgrounds
    - Downscale background images (e.g. campaign maps) on small screens
    - New graphics for ui_fsmenu
    - Darker background for wui elements
  - Fixed keyboard navigation after "remove game" dialog has been displayed
  - Modified row selection/display in tables and message list
  - Remove focus from editbox in gamechatpanel when it minimizes
  - Added tooltip to file save and make directory edit boxes if illegal filename
    is being entered
  - Added a checkbox to toggle filenames when loading a replay
  - Fixed scenario title and tooltip during game setup
  - Preselect player names and tribes for non-scenario maps in single player
  - Set AI from selection in UI when saveloading
  - Missing wares (and workers) are indicated differently in InputQueueDisplays
    if the ware is on the way to the building than if it's really missing
  - Redesigned and fixed the showing of workarea overlays
  - Tweaks for the multiplayer game setup screen: less empty spaces and more
    space for important content
  - Very large amounts in WaresDisplays are shortened as "10k", "10M", "10G" to
    prevent text from flowing over on the left
  - When dismantling a building, the building window closes automatically
  - Added a dialog for the host when the connection to a client is lost. Allows
    the host to select whether to replace the client with an AI or to exit.
  - Setting focus to edit box when opening the game save menu
  - Don't provide the filename for the standard background image in the progress
    window. This fixes image positioning when starting multiplayer games.
  - Make dismantle button independent of buildable/enhanced. This fixes missing
    Dismantle buttons in Empire scenario 4.
  - Improve formatting for user status in the lobby
  - Allow hotkey usage while windows are open
  - Fixed memory leak in network UI
  - Fixed bug #1191295: Seafaring: builder not listed in expedition list in port
  - Fixed bug #1635808: Display of worker in training sites is not updated.
  - Fixed bug #1653254: Action window of Road stays open under some
  - Fixed bug #1653460: UI::Panel::get_inner_h() const: Assertion `tborder_ +
                        bborder_ <= h_' failed
  - Fixed bug #1658489: Expedition tab in Port window messed up some times
  - Fixed bug #1644553: Crash when buildhelp icon is clicked twice
  - Fixed bug #1687043: Memory leak in Multilineeditbox
  - Fixed bug #1695701: Crash when a militarysite window is open while the
                        enemy conquers it by sending a notification.
  - Fixed bug #1672059: Selection is not cleared when new message arrives
  - Fixed bug #1691336: Building window suddenly appears after construction has
  - Fixed bug #1658668: Menu Launch Game: Switching AI player on/off changes AI
  - Fixed bug #1656245: Scrolling with mousewheel is slow in some places
  - Fixed bug #1769344: High processor load single player launch game screen
  - Fixed bug #1785404: Chat does not autoscroll
  - Fixed bug #1794063: Extra message arrival sound
  - Fixed bug #1801208: Message boxes with long unbreakable strings show empty


  - Removed building names from confirmation messages, as they cause grammar
    problems in some languages.
  - Production program descnames can now be fetched by pgettext as well as plain
  - Deleted unused networking messages and unified the "Something went wrong"
  - Added a Python script to do automated glossary checks for translations. It
    enlists the help of Hunspell and 'misuses' the Transifex note field in order
    to reduce noise.
  - Implemented glossary generation for the Transifex glossary with help from
    the Translate Toolkit (http://toolkit.translatehouse.org/).
  - Show translation stats next to the language selection menu and invite
    translators if a translation is incomplete, with the help of the Translate
    Toolkit. New utils script "update_translation_stats.py" that will write
    translation statistics to data/i18n/translation_stats.conf and is called
    on every translation pull.
  - Fixed various string issues and added some translators' comments
  - Completed the switchover to the new font renderer
  - Fixed translation of trainingsite program names
  - Fix undefined / unexpected behavior in case LANG environment is empty
  - Fix fetching of translations when user locale is set to C. If the desired
    Widelands locale does not exist, try to fall back to en_US.utf8 to make
    libintl happy.
  - Adapted buildcat.py to get translations for resources
  - Add an extra key to get a translatable author-value in the developers list
  - Fixed bug #1636586: Inconsistent localization of player names in Editor
                        player menu

Help and Documentation

  - Convert editor/game tips to Lua and display them in the in-editor/in-game
    help. Added new tips.
  - Restructured, enhanced and added to the Lua scripting reference for Tribes.
  - Added/Improved documentation for animations, worker programs, worker
    helptexts, AI hints, World units and the Richtext system
  - Added immovables to in-game help
  - Fixed some wrong indentation for the documentation in the website.
  - Added toptopple sound documentation in .ods spreadsheet format (LibreCalc)
    into 'doc' folder
  - Fixed and improved documentation for LuaMapObjectDescription::get_type_name.
  - More cross-linking between map object classes and their description objects.
  - Fixed some miscellaneous bugs in the LuaMap documentation.
  - Use mathjax for latex in docs instead of imgmath
  - Enable building documentation with warnings as errors on Travis
  - Constructionsites' help button now points to the help for the building being
  - Documented metaserver command line options
  - Added lua_path.cc to the documentation
  - Add tribe-specific ware purpose texts to web encyclopedia
  - Fixed bug #1792297: Advanced buildings report wrong worker experience in the


  - Overhauled the selection menu for critters to give them categories
  - Added an option "items per row" and rearranged the terrains and immovables
  - Display of bobs, immovables and resources can now be toggled individually
  - Fixed drag and drop
  - Removed dead code for make infrastructure tool that was never finished
  - Fixed keyboard navigation with escape and enter for save map and save game
    screens. If the editbox is focused, escape will reset the text if changed,
    and close the window if unchanged.
  - Refactored Editor Player Menu to use Box layout. Show dismissable warning if
    more than 8 players are selected.
  - Map Editors now can choose "Random" tribe in the player menu
  - Converted editor infotool to new font renderer and added some layout tweaks
  - Enable OK button in map options when tags have changed.
  - Use temporary container in cleanup_port_spaces to prevent invalid iterators
  - Limited the editor undo stack to 500 items to prevent boundless growth of
    memory use
  - Fixed bug #1627537: Release mouse button does not work when placing things
                        and mouse gets under a window
  - Fixed bug #1738641: Resources can be replaced only once in editor
  - Fixed bug #1749146: MultilineEditboxes: Entering text not possible
  - Fixed bug #1736086: Saving a map with no player set shows up as having one
                        - Initialize new maps with 0 players
                        - Disable selection of maps with 0 players
                        - Automatically add first player to editor player menu
  - Fixed bug #1741779: Description is cut in map options multilineeditbox
  - Fixed bug #1782593: Segfault in random map generator
  - Fixed bug #1783878: Saved random map does segfault on load if no tribe is
                        explicitly set
  - Fixed bug #1815613: Editor crash when setting new 0,0 coordinates

Graphics Engine

  - Renamed "sub" tag to "div" in new font renderer.
  - The new font renderer now sets the width properly and supports player color
    for images. Added width property to img tag
  - The new font renderer now creates a set of textures that will be blitted
    separately by the new class RenderedText. This avoids issues with texture
    sizes exceeding the maximum size supported by graphics drivers when
    MultilineTextareas get arbitrarily long.
  - Fixed incorrect layout of divs with width=fill when the previous div is
    wider than 50%
  - Fixed superfluous space characters at beginning and end of lines
  - Implemented text floating around images
  - Messages try to render with the new font renderer first, then fall back to
    the old font renderer for layouting messages that haven't been converted yet
    (and from savegames).
  - All images with player color now receive their color by a common
    playercolor_image function. Available player colors are kept in an array.
  - Replaced raw pointers in the font renderer with shared_ptr
  - Split graphics into multiple Cmake libraries.
  - Got rid of EdgeOverlayManager and FieldOverlayManager and shifted their
    functionality to local draw() functions in individual classes. Gave the
    Interactive* classes their own draw() functions.
  - Refactored Tcoords, Fcoords and TriangleIndex
  - Force integer precision for overlays. This fixes fuzzy overlay images when
    the player hits Ctrl+0 to reset the zoom.
  - Show a basic SDL error message box to the user if the shading language
    can't be detected or is too old.
  - Print the shading language as double to console
  - Fix shading language version detection for system locales that don't
    use . as a decimal separator
  - Fail with SDL messagebox if SDL_BYTESPERPIXEL != 4
  - Fixed bug #1674243: Assign owners to neighbors in Player::rediscover_node.
                        The lack of owners was causing crashes with the road
                        program, which no longer knew which texture to pick.
  - Fixed bug #1711816: Black terrains on fullscreen switch.


  - Replaced SDL-Net with Boost.Asio
  - Added IPv6 support
  - Implemented a relay server. Opening a router port is no longer necessary
    for the host of internet games
  - Improved the online login code by adding semi-constant user ids that are
    valid for 12 hours, allowing to reclaim a username after a disconnect
  - Increasing password security by no longer storing and transmitting it in
  - Improvements to Metaserver protocol
  - Fixed memory leak in LanGameFinder
  - Fixes on the communication between widelands and the metaserver:
    - Permit answering PING requests even while logging in
    - Print current time to console when logging in
    - Ease finding the corresponding log entry on the metaserver when debugging
    - Re-enabled and fixed unused code for whisper message to nonexisting player
    - Handle error message when trying to join a non-existing game
    - Avoid hanging client even after being notified about the non-existing game
    - Removed no longer needed error messages
  - Fix crash in NetClient when host changes their mind about a custom map in
  - Fixed bug #1691335: Multiplayer client crashes when the host hasn't selected
                        a map yet
  - Fixed bug #1794339: Segfault joining game
  - Fixed bug #1805325: Crash on late joins of LAN games, and display of map
                        name in LAN lobby.

Build System

  - Windows builds now have a unique app id for every build. This allows
    parallel installation of several versions.
  - Added support for gcc7 and llvm8.
  - Removed "redundant-decls" flag for Windows builds due to conflict between
    SDL and MinGW.
  - New Macro FALLS_THROUGH; for use in switch statements.
  - Let Travis build each commit on MacOS in addition to our Linux builds. Note
    that the regression test suite is only run for Linux.
  - Allow compiling with AddressSanitizer, and choosing between gcc and clang on
    the first compile.
  - Deactivated the rich text testing project, as it's currently unmaintained.
  - Move website related binaries to base dir in compile.sh
  - Do not build website tools on appveyor, this saves 20 minutes on x64 debug
  - Check for minor version of CMake
  - Only export ICU_ROOT if CMake version is lower than 3.12
  - Support for glbinding 3 and new Boost version
  - Fix revision detection
  - Fixes for handling different Cmake policies
  - Use MacOSX.sdk if an appropriate versioned SDK can't be found.
  - Add linker flags to please Ubuntu 18.10
  - Use more processing units when using the compile script. Defaults to: max.
    Processors -1. Can be set with the -j switch.
  - Copy the version file instead of moving it, so that the update script can be
    run twice in a row.
  - Use compile.sh when running update.sh
  - Added tags for Flatpak to appdata.xml
  - Modernized how Mac OS X releases are done:
    - Add CFBundleShortVersionString to Mac builds
    - The script for building on macOS uses gcc-7 now. Also it checks whether
      the SDK10.7 is installed or not and uses the latest installed version if
      it cannot find the old one.
    - Choose between compiler clang or gcc, specify build type: debug or release
    - Set build target to 10.9 if macOS 10.9 or newer is found
    - Append macOS target version to dmg filename
    - Fix the dependency fixer to not be confused by library id's
  - Fixes for Debian-based software centers:
    - Add stock icon to appdata.xml
      (c.f. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=857644)
    - Change icon definition in .desktop to be a generic one
    - Content ratings are now accepted by the validator, so we've activated them
    - Validate .desktop file on translation updates. Removed deprecated category
      from .desktop file.

Other Issues

  - Moved utils/fix_lua_tabs.py to utils/fix_formatting.py and added calls to
    clang-format and pyformat.
  - Cleaned up Windows utils
  - Removed unused images
  - Fixed a series of compiler warnings for clang, gcc and Windows.
  - The ProductionSiteDescr constructor still contained some checks from the
    time when they used to inherit from MilitarysiteDescr. Removed this obsolete
    code and made working_positions and programs mandatory.
  - Used the Notification system to reduce some code interdependency.
  - Various code cleanups to make the code more readable.
  - Fixed diverse crashes and memory leaks with the help of AddressSanitizer
  - Diverse refactorings to use composition over inheritance and to get rid of
    multiple inheritance
  - Replaced SyncCallback through a std::function<void()>.
  - More widespread use of smart pointers
  - Untangled MapView and InteractiveBase.
  - Cleaned up map handling in EditorGameBase
  - Removed some dead code and reduced dependency cycles
  - Options screen now saves immediately so that the changes are persistent even
    if Widelands crashes afterwards.
  - Added 2 new functions to Lua interface: list_directory and is_directory
  - Split new function cleanup_portspaces() from allows_seafaring(), and
    refactored port spaces checks.
  - Only recalculate whether a map allows seafaring when something has changed
  - Economies are now mapped to global serials and kept as unique_ptr in the
    Player objects
  - Exit gracefully if user specifies a datadir that doesn't exist
  - More strict sanitizing of chat messages
  - Print a welcome message on joining the metaserver
  - Write Windows log output to homedir instead of the program dir
  - Widelands is now installed into local appdata on Windows
  - Copy translation validation results into maintainers' and translators' views
    to make them easier for translators to navigate
  - Use std::cout for logging when calling terminate on shutdown, because the
    logger might not exist any more
  - Remove test logging output from production_program.cc
  - Use internal names rather than descnames for log messages and workarea IDs
  - Refactor website binaries to use a real tree data structure for writing JSON
  - Print more information in syncstreams. Create additional smaller syncstream
    files containing the last few seconds leading to a desync.
  - Added a suppressions file for Valgrind to mask memory errors caused by
    backend libraries
  - Fixed bug #1648178: Fatal Exception: Bad Cast
  - Fixed bug #1743086: ASAN memcopy overlap on Ubuntu Budgie from libSDL
                        2.0.6+dfsg1 by disabling sound as a workaround to a bug
                        in the backend
  - Fixed bug #1724145: Crashes in master-2511_release_x64 on save, caused by
                        economy merges making Lua variables go nil
  - Fixed bug #1776603: ASAN: wl_map_object_info leaks memory

0 blueprints and 6 bugs targeted

Bug report Importance Assignee Status
1825925 #1825925 Mac OS builds for >= 10.9 have no sound playing 2 Critical   10 Fix Released
1826669 #1826669 R20-rc1 HeapUseAfterFree when changig Map during Download 2 Critical   10 Fix Released
1826750 #1826750 Admin users cannot host an internet game 3 High   10 Fix Released
1825539 #1825539 Only rename user if name is taken in multiplayer and not IRC 4 Medium   10 Fix Released
1825811 #1825811 Widelands won't build on Ubuntu Eoan 1 Undecided   10 Fix Released
1825827 #1825827 Needed changes for Widelands Windows builds 1 Undecided   10 Fix Released
This milestone contains Public information
Everyone can see this information.