Developers patch 3745 - 3748

Current list of deprecated mods:

Raw list of changes:


(Draft as of 2022/11/04 - 22:15 (GMT + 1))

# 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 guage 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

- 4z0t (#4232, #4242, #4171, #4269, #4309, #4310, #4319, #4311)
- Penguin5 (#4214, #4217)
- Relent0r (#4180, #4205, #4265, #4268, #4271, #4284, #4305, #4294)
- hdt80bro (#4172, #4186, #4176, #4174, #4203, #4204, #4183, #4184, #4185, #4236, #4225, #4234,
    #4226, #4237, #4228, #4227, #4238, #4280, #4270, #4229, #4069, #4301, #4321, #4325, #4217,
    #4334, #4207)
- Rowey (#4172, #4176, #4174, #4183, #4184, #4185, #4235, #4236, #4238)
- Jip (#4119, #4124#4188, #4190, #4191, #4212, #4205, #4232, #4241, #4243, #4244, #4248, #4250,
    #4253, #4260, #4254, #4262, #4249, #4025, #4267, #4266, #4264, #4281, #4270, #4282, #4285,
    #4286, #4292, #4290, #4304, #4298, #4312, #4313, #4308, #4291, #4287, #4328, #4329, #4307,
    #4331, #4332, #4327, #4334, #4338, #4336, #4201, #4202, 4230)
- iczero (#4338)
- FemtoZetta (#4274)
- KionX (#4131, #4255)
- CheeseBerry (#4219)
- BlackYps (#4175)
- YuchenJimmy (#4279)
- xXEddieXxx (#4299)
- Zjonn (#4323, #4326)
- ErikMekkes (#4321)

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

## List of incompatible mods

```lua
-- mods that are deprecated, based on mod folder name
deprecatedMods["simspeed++"] = true
deprecatedMods["#quality of performance 2022"] = true
deprecatedMods["em"] = "11"

-- as per #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 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 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.

A work of art is never finished, merely abandoned

Added a second sneak peak: all about command and cursor interactions!

A work of art is never finished, merely abandoned

This post is deleted!

I would really like to see the ability to lock units to another unit to be built in for example locking shields and flak to an experimental. Also, one query can the tml's targeting be optional so that a tac bank can be used to select up a bunch of structures and shift-g them. I'd imagine if structures can't be targeted, they will indefinitely fire at the ground attack markers as opposed to firing at structures until they are destroyed.

Ground fire has a salvo limit that can be defined in each unit

I'd really like the ability for engineers, combat engineers, and sacus to reclaim only. Currently,
when your mass fills up, they begin to assist units or repair. This gets them stuck in a loop and no longer reclaiming. It would also be nice to be able to disable auto-assist on smds and nukes for engineering stations.

I think you are using the Patrol order with your engies, right? Try using instead Alt-Right click (queue up a few with shift), that should solve this issue.

I can not begin to describe how pleased I am that you make a point of mentioning which mods are integrated or otherwise conflicting. On that note, one of my favorite features from Random UI is the 'easy reclaim', which I did not see mentioned here. Being able to only click reclaim without move orders has been amazing. Is that also being integrated alongside the hard-move commands? (now 'ignore mode').

@jip said in Upcoming developers patch:

Deprecated UI mods

The following UI mods are known to collide with these changes, and are therefore deprecated:

  • Advanced Camera Stuff (we're integrating the range rings of this mod)
  • Random UI Improvements

Make a post in this thread if you think some of these features are worth keeping around and we'll discuss whether the UI mod should be re-implemented or that we can integrate the behavior into the game.

Is there some secret to turning on the range rings? As at the moment faf develop forces additional camera stuff off but does not display the shift (or ctrl depending on settings) range rings.

The range rings are not integrated yet, once they are I'll add it to the post. There will also be (Youtube) clips on some of the new (and old) features of the game so that there's more awareness.

A work of art is never finished, merely abandoned

Can I suggest a feature?

Contextual drag selection:

  • Alt drag box to select only engineers
  • Normal drag box to select only army
  • Shift drag box to select everything

@immortal-d said in Upcoming developers patch:

I can not begin to describe how pleased I am that you make a point of mentioning which mods are integrated or otherwise conflicting. On that note, one of my favorite features from Random UI is the 'easy reclaim', which I did not see mentioned here. Being able to only click reclaim without move orders has been amazing. Is that also being integrated alongside the hard-move commands? (now 'ignore mode').

Yes it is - it is already in! You can set a separate selection threshold when you are in reclaim mode (via hotkey or via the reclaim button in the UI). See also the settings (when you are on FAF Develop).

A work of art is never finished, merely abandoned

@immortal-d said in Upcoming developers patch:

I can not begin to describe how pleased I am that you make a point of mentioning which mods are integrated or otherwise conflicting.

And if there is anything else we can do to make the patch easier to understand / process, do share.

A work of art is never finished, merely abandoned

@archsimkat said in Upcoming developers patch:

Can I suggest a feature?

Contextual drag selection:

  • Alt drag box to select only engineers
  • Normal drag box to select only army
  • Shift drag box to select everything

I think that would be really awesome!

@jip I think making a guide to where does the mod menus is after integration and how to views the options of the mod after might be good

@archsimkat I think It would require engine changes, I can only tell that for engies shift+alt is possible through UI

“Be a yardstick of quality. Some people aren’t used to an environment where excellence is expected.”
— Steve Jobs.
My UI Mods

@archsimkat
alt3.gif

“Be a yardstick of quality. Some people aren’t used to an environment where excellence is expected.”
— Steve Jobs.
My UI Mods

Nice work 4z0t! Let us know when the mod is up 🙂

@archsimkat mod
is done and works fine for me

“Be a yardstick of quality. Some people aren’t used to an environment where excellence is expected.”
— Steve Jobs.
My UI Mods

Updated the post with the new features about recall, mouse sharing and the changes we're making to reclaim labels. See also the second post:

A work of art is never finished, merely abandoned