Game version 3745 (6th of November, 2022)

And there it is, the last major patch of the year!

This patch was ambitious. The purpose was to introduce modern features into the game, while at the same time make the game easier to customize to your liking. Some of the patch can be immediately applied by players, like the extended features on control groups, camera recall functionality and the improved performance of the reclaim overview. Other features are not immediately visible but are a major step forward, like the navigational mesh we generate for the map you’re playing on for AIs.

Previous patches primarily made changes in the code directly related to the simulation. This patch also includes changes to the code surrounding the user interface. Also refers to UI code or UI mods. It was not possible to do this patch without causing incompatibility with some of the UI mods that are out there. We introduced a list of incompatible mods at the end of this changelog. Authors can update their mod, bump the version number and the game should automatically make it available again.

As a minor note to the authors of UI mods: it is better to have many small UI mods that each add in a single feature, then it is to have one large UI mod that adds in many features. One example is Economy Manager - a mod often used by players - is no longer compatible because one of its dozen features is incompatible:the command feedback no longer triggers with Economy Manager enabled. Long story short: keep the UI mods small and simple, as people can enable any number of them.

And as this year ends I’d like to show my personal appreciation to some contributors and community members. I’ll start off with hdt80bro, who has been working on the repository for the past few months. His extensive knowledge and motivation was visible in our discussions and above all in his code changes. We’re lucky to have him. Next to that I’d like to thank Madmax for always being there when I needed essentially anything. Whenever I needed a tester, Madmax is usually there ready to help confirm the stability of it. And of course there is Rowey - always ready to assist with his friendly character. Rowey has pushed the FAF Youtube that increased exposure on the development of this game, like being there when we were producing the game development series. a lot of the videos on game development. And last I’d like to thank Sprouto - creator of the LOUD community - for being an inspiration to what he managed to achieve with LOUD. Every time we talk I learn something new and I am looking forward to our next conversation.

And like that, a new year of development will start. And with a new year we’ll take a new route to how we’ll further develop this game. Instead of having a ‘game team’ - that introduces an arbitrary boundary between contributors - we’ll move towards how other projects are managed: by creating a clear, properly scoped backlog of issues that contributors can pick up. Anyone can add and discuss issues in the backlog. Once an issue is accepted it is added to a milestone. Milestones allow us to steer contributors towards a common vision. They make it immediately clear when you can expect your changes to be live. Alas - there’s too much to tell and too little room in this changelog. For those interested, we’ll soon make a post on the forums and release the new contribution guidelines on the repository.

With appreciation towards all the contributors that made this patch possible,

Jip

Features

  • (#4119) Extend functionality of control groups Adds in modern features into how control groups work. This includes:

    • the ‘stealing’ units from other control groups (like in Starcraft II)
    • being able to toggle the control group inheritance of factories
    • allow you to adjust the behavior of the camera when you double tap
    • allow you to adjust the double tap interval

    And on top of that we’ve introduced various new hotkeys that interact with control groups.

    You can find the settings in the game options. You can find the additional hotkeys in the hotkeys menu.

  • (#4124, #4331) Improve cursor / command behaviors Acts as an integration of the ‘Random UI improvements’ mod of Strogo. This includes:

    • disabled reclaim cursor when you can’t issue reclaim orders due to camera distance
    • manual tactical / nuke launchers no longer attach to units, and instead always target the ground
    • area of effect preview when you try to issue an attack order
    • allow you to adjust the selection threshold, particular useful for 2K+ displays or when watching replays

    You can find the settings in the game options.

  • (#4124) Extend camera features Acts as an integration of Additional Camera Stuff. This includes:

    • Allows you to retrieve up to 9 camera locations
    • Allows you to restore the previous camera position

    You can find the additional hotkeys in the hotkeys menu.

  • (#4188, #4190, #4191) Allow observers to view mouse position of players in-game In particular useful for casters. The feature does not work with replays or live games (that are replays too). In order for it to work you need to be an observer in the game, as it starts. The information is not stored in the replay either.

  • (#4203, #4204, #4212, #4234, #4244) Introduce recall Adds in a recall feature. Similar to a the ‘concede’ feature that other games provide, it allows you to cast a team vote on whether you want to recall as a team. When you are with two or less alive players it requires all alive players of the same team to agree. When you are with three or more alive players it requires all but one of the alive players of the team to agree.

    Was introduced because people got frustrated with the Fullshare mode in combination with the limitated player base size.

  • (#4219) Add in successive upgrades hotkeys for Hotbuild Allows you to easily queue the upgrade of an upgrade using Hotbuild.

  • (#4232) Add batching of reclaim labels Reclaim labels are batched as you zoom out. As a result they remain readable.

  • (#4241, #4334) Add coloring of reclaim labels Reclaim labels are colored based on their value.

  • (#4175) Add PBR blender nodes for rendering of units
    This acts as a step-up towards introducing PBR-based shaders. It is used to check the textures / assets of units and acts as an inspiration to the shader implementation.

  • (#4131) Introduced of shared armies Allows you to play as one army, where you all share control over the same units. This used to be a standalone executable and is now integrated with the base game.

    You can find these settings in the lobby options. Note that when applied the game is no longer rated.

  • (#4254) Improve text markers When you create a text marker it is also send to the chat with camera coordinates attached. This allows you to jump to text markers.

    Based on a forum post.

  • (#4253) Attempt at fixing engineer behavior for Seraphim air factories Engineers constructed by the Seraphim air factories get teleported instead of ‘tractored’ off the factory. This was the only factory that made it impossible to select the engineer during roll off. Attempting to make the unit selectable during tractoring introduced a pile of issues.

    Therefore now all Seraphim air factories are magicians until we find better effects.

    Based on a forum post.

  • (#4249) Add in a hotkey to select intelligence structures

    Based on a suggestion by a user.

  • (#4249) Add in a hotkey to filter your selection to the engineer with the highest tech All other engineers in your old selection will assist the selected engineer

    Based on a suggestion by a user.

  • (#4266) Improve pathing surrounding props Only large props (the size of a frigate or larger) block pathing.

    Previously a lot of props blocked pathing, in particular small rocks. This introduced a lot of noise in the occupancy layers, where it isn’t clear that this noise exists. Especially when you are zoomed out, being unable to see the rocks.

    The noise caused units to behave strange, suddenly stop, circle around, etc. By removing this noise we indirectly improve pathing a lot.

  • (#4270, #4282, #4285, #4298, #4312, #4313, #4308) Introduce generated navigational mesh to interpret maps This feature is technically involved. The idea is similar to the marker generator that has been part of the Uveso AI for a few years now, but instead of markers we work with areas. The navigational mesh can be used by AIs to understand and interact with the map.

    The feature is based on compression via quad trees that compress the pathing information. We use the leafs of the quad tree to create a graph. This graph is initially used for just pathfinding, but we can use the graph for so much more.

    All the code related to this feature is licensed using the MIT license. We’re improving it in collaboration with the AI developers. We try to convert their requests into an algorithm that computes the answer. The algorithm needs to be simple, yet efficient as there is essentially no budget to perform computationally expensive algorithms.

    We’re open to new contributors to help maintain and expand this exciting new feature of FAF.

  • (#4287, #4328) Adjust factory behavior when building and finished building a unit Drastically reduces the time it can take for a unit to roll off the building pad of a factory. The production of a new unit starts the moment the build pad is clear. Also allows units to rotate to the correct roll off point right before being finished.

    Tech 1 tanks, artillery and labs have one second additional build time to compensate for the reduction of roll off time.

  • (#4307) Re-organize game options Adds in headers and groups various options together. A few options have been renamed. Others have been removed. The game options menu is a lot more organised now.

Bug fixes

  • (#4338) Fix remote code exploit It was possible to inject arbitrary code into the simulation via a UI mod. This would not be able to affect your system, but it would allow you to run any code in the simulation and have that code run for all players involved.

    It is highly appreciated that this was brought to our attention discretely.

  • (#4205) Fix typo with missile callbacks for AIs

  • (#4225, E#13) Fix Harbingers preference to reclaim instead of attacking during an attack move They now attack move as you’d expect, instead of notoriously reclaiming the nearest tree.

  • (#4248, #4337) Fix issues with Tractor Claws of the Colossus Air units are now destroyed as soon as they reach the claw and the beam of the colossus is now less likely to try and attack units that are being tractored.

  • (#4201) Fix footprint and collision box of Ythotha The Ythotha is no longer afraid of walls and can again happily crush them.

  • (#4202) Fix duration of death animations of structures It now matches the time it has always taken for factories to be destroyed.

  • (#4250) Fix missing meshes and normals of various units Including the Summit, that now again looks a lot better.

  • (#4207, 4230) Fix props corrupting bomber weapon state

  • (#4260) Add the BlueprintId to Blueprint.CategoriesHash

  • (#4171) Fix scaling issue with new mod manager

  • (#4262) Fix teleportation glitches No more teleporting Cybran ACU with a cloak upgrade.

  • (#4264) Fix a glitch with an Atlantis and a gunship with its cargo No more invincible units through this weird glitch.

  • (#4291) Allow turrets to rotate to the nearest threat again This was broken by the previous patch, it now functions as expected again.

  • (#4329) Fix collision size of Titans, Loyalists and Ilshahovs for beam weapons Beam weapons (in particular, the Seraphim tech 2 point defense) should now more reliably hit these specific units.

  • Properly populate AdjacentUnits of structures Useful for AIs to quickly determine adjacent units. Only units that provide an adjacency bonus are tracked.

Performance

  • (#4180) Improve performance of AI economy conditions

  • (#4284) Improve performance of AI builder conditions

  • (#4237) Improve performance by changing self.Fun(self, ...) to self:Fun(...) This was initially considered an improvement to performance. With the recent improvements to the benchmarking tools we found out that this isn’t strictly the case. Therefore we are reverting it back to the more-readable format.

  • (#4232, #4242, #4241, #4243) Improve performance of reclaim labels Drastically improves the performance of reclaim labels.

    A lot of UI mods adjusted the behavior of reclaim labels. Usually they did this by using destructive hooks. That makes it impossible for us to push through these improvements. UI mods that apply destructive hooks to reclaim.lua have been deprecated. Their authors are highly encouraged to update their mods and are recommended to use soft hooks instead.

  • (#4325) Clean up and improve performance of imports

Campaign / AI

  • (#4265, #4268, #4271, #4305, #4300, #4294) Improve AI behavior and performance of the base game Including, but not limited to:

    • use alternative move functions that reduce formation issues
    • implement eco-over-time to better gauge the economic situation
    • fix ACU behavior where it is unable to finish structures
    • fix various issues with commands not being cleared properly
    • fix factory manager not cleaning up destroyed factories
    • introduction of pathing build conditions (using navigational mesh)
  • (#4304) Add HQ support functions for AIs

  • (#4309, #4310, #4319, #4311) Clean up of various build conditions

Annotations

(#4172, #4186, #4176, #4174, #4183, #4235, #4227, #4238, #4025, #4229, #4069)

We’re batching all pull requests with regards to annotations into one entry. That doesn’t make the work less meaningful - the introductions of annotations is what Typescript is for Javascript: a completely new and improved approach to development.

You can find the plugin by searching for fa-lua-vscode-extension in the FAForever Github group, as found here: https://github.com/FAForever

Other changes

  • (#4214) Adjust order of lobby options for less scrolling

  • (#4226) Introduce initialization decoupled layouter design pattern Improves the layouter UI pattern that was introduced since the last patch

  • (#4228, #4246) Add key action localization directives Allows us to add in keys that are used for a hotkey to a description. Useful for tooltips and the loading screen tips.

  • (#4256) Allow debugging drawing tools to function properly in AI games These are often used by AI developers to debug their code.

  • (#4257) Allow easier testing on deploy/fafdevelop All files in /devdata are now loaded when playing on the FAF Develop game type

  • (#4217) Add new and improve existing loading tips

  • (#4274) Update description of Fullshare gamemode

  • (#4280, #4281, #4323) Improve workflow for testing Allows us to write better tests for engine-oblivious functionality

  • (#4279) Add or improve translations for traditional chinese

  • (#4269) UI Framework: introduction of the set and support classes

  • (#4289) Speed up checking when a player is defeated In an attempt to match the old time taken to determine when a player is defeated.

    Based on a forum post.

  • (#4299) Fix energy storage large strategic icon in construction menu

  • (#4290) Allow hovering over the Ythotha storm Allows you to see veterancy statistics, to finally settle the debate how useful the storm is

    Based on a forum post.

  • (#4301) Introduce color library Allows us to easily convert numbers into colors as RGB, HSL or HSV.

  • (#4321, #4332) Deprecate mods by version number Previously we could only deprecate mods by its name, regardless of its version. We can now also include the version, allowing an author to update the mod and have it automatically ‘undeprecate’ by doing so.

  • (#4326) Create initial tests for NavDatastructures.lua

Contributors

And with thanks to Fichom for creating various textures scattered over the pull requests.

List of incompatible mods

-- you can find the most recent list here: https://github.com/FAForever/fa/blob/deploy/fafdevelop/init_fafdevelop.lua#L70
-- mods that are deprecated, based on mod folder name
deprecatedMods["simspeed++"] = true
deprecatedMods["#quality of performance 2022"] = true
deprecatedMods["em"] = "11"

-- as per [#4119](https://github.com/FAForever/fa/pull/4119) the control groups (called selection sets in code) are completely overhauled
-- and extended feature-wise, because of that these mods are no longer viable / broken / integrated
deprecatedMods["group_split"] = "0.1"
deprecatedMods["Control Group Zoom Mod"] = "2"
deprecatedMods["additionalControlGroupStuff"] = true

-- as per [#4124](https://github.com/FAForever/fa/pull/4124) the cursor and command interactions are complete overhauled and extended feature-wise,
-- because of that these mods are no longer viable / broken / integrated
deprecatedMods["additionalCameraStuff"] = "3"
deprecatedMods["RUI"] = "1.0"

-- as per [#4232](https://github.com/FAForever/fa/pull/4232) the reclaim view is completely overhauled
deprecatedMods["Advanced Reclaim&Selection Info"] = "1"
deprecatedMods["AdvancedReclaimInfo"] = "1"
deprecatedMods["BetterReclaimView"] = "2"
deprecatedMods["disableReclaimUI"] = "2"
deprecatedMods["DynamicReclaimGrouping"] = "1"
deprecatedMods["EzReclaim"] = "1.0"
deprecatedMods["OnScreenReclaimCounter"] = "8"
deprecatedMods["ORV"] = "1"
deprecatedMods["SmartReclaimSupport"] = "3"
deprecatedMods["DrimsUIPack"] = "3"
deprecatedMods["Rheclaim"] = "2"

Note that mods like Quality of Performance are no longer required - they barely have impact on the performance of the simulation these days.