Developers Iteration II of 2023

Find out about the last bits and twigs for the second development iteration of the game! You can experiment with these changes yourself by playing the FAF Develop game type. You can choose this game type as you host your game:

a724abb1-a5db-4d84-8734-4fddcbb638ec-image.png

Unlike last year we will no longer write out the changes in this forum post. Instead we'll use the same approach that @Rowey introduced for the balance team. You can find a more human-readable format about the changes on the patchnotes website.

This is a permanent link, we'll update and change the content as time passes. For the complete history on all changes you can read up the Github history:

The second development iteration is planned to be released on the 24th of June. It will only contain development related changes, such as bug fixes, performance improvements and new game features.

References to all development iterations:

A work of art is never finished, merely abandoned

# Game version 3760 (27th of June, 2023)

See the patch notes of 3758 for all the details of the second development iteration.

We would like to remind people that we're always open to feedback. You can get in touch with us through the forums, Discord and of course through GitHub to discuss the patch.

With thanks to those that took the time to report bugs,

Jip

## Bug fixes

- (#5153) Fix a bug with AI being buggy in the featured mod Nomads

- (#5159) Remove the rehost functionality

  The rehost functionality has been broken for quite a long time. It would not properly restart the 
  game with the correct mods and previously private lobbies would become public. We've not managed to 
  fix it for quite some time and it confuses those who use it. Therefore we've decided to remove it 
  until we can find a proper fix.

  You can still 'rehost' the usual way, and in that case, your mods will work too.

- (#5158) Fix a bug with the Cybran destroyer being stuck in the transition animation

- (#5155) Fix a bug where abandoned armies would not be defeated

- (#5155) Fix a bug in the campaign/co-op where naval rally points were ignored

- (#5155) Fix a bug in the campaign/co-op where the army brain was missing certain functions

- (#5148) Fix a bug with the in-game file picker for replays

## Contributors

- Jip (#5159, #5158, #5155, #5148)
- Relent0r (#5153)

# Game version 3758 (24th of June, 2023)

There are a lot of goodies in this iteration! The changelog format has been adjusted to make it easier to read. It now contains less detailed information and more general descriptions. Additionally, the in-game changelog window has been enhanced. To access more readable patch notes, you can find buttons at the bottom of the in-game changelog. These buttons will take you to the patch notes on GitHub or to the patch notes website 'patchnotes.faforever.com' for the respective branch. The website provides a user-friendly reading experience and may include helpful images to improve your understanding of the changes.

As mentioned in the previous development iteration, our focus is now primarily on AI development. This iteration establishes the groundwork for future work in this area. Over the next few months, we will be working on improving the AI's decision-making abilities by applying and introducing additional abstractions of the game state. If you'd like to help with this then feel welcome to introduce yourself in the dev-offtopic channel on Discord!

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

Jip

## Features

- (#3823) Improve the auto-balance feature by shuffling the pairs of players

- (#4997) Add a hotkey to select the nearest idle tech 1 engineer

- (#5040) Docked engineering drones are now ignored by anti-air weapons

- (#5134) The recall feature now requires teams of three (remaining alive) players to all agree on a recall

  We received complaints of people being recalled in the recently introduced 3v3 matchmaker without their consent. The recall feature was implemented when this matchmaker queue did not exist yet. As such we adjust the threshold slightly to prevent the negative aspects in the matchmaker while still allowing you to recall without the complete consent of a team in large team games

- (#5133) Personal shields now remain enabled in transports

  This behavior does not apply to bubble shields. This prevents the recharge cycle from being reset moving units around in transports. This specifically applies to ACUs with a personal shield enhancement

## Bug fixes

- (#4820) Fix 'OnGiven' callbacks not working properly, most notable in various campaign maps

- (#4824) Fix the teleport delay of ACUs being too short due to a bug. They are now 25 seconds again

- (#4774) Fix variables being in global scope while they should be in the local scope

- (#4862) Fix a bug where stationary missile launchers could end up launching missiles into the terrain

- (#4863) Fix a bug where states were unable to call their base class

- (#4867, #15) Fix a bug where missile progression was not transferred when gifting a unit building a missile

- (#4869) Fix a bug where tarmacs of structures would be duplicated when transferring a structure

- (#4904) Fix a bug where the Cybran tech 1 land scout can gain veterancy

- (#4877) Fix blocking of sound banks falsely identified as duplications

- (#4928) Fix a rare bug with the veterancy system that would prevent experience distribution

- (#5027) Fix a bug where the Quantum Optics Facility was being self-conscious, refusing to be turned off

- (#5028) Fix a bug where engineering drones (of the UEF) would be ignored by anti-air weapons

- (#5034, #15) Fix a bug where adjacency would not apply immediately to units that are building a missile

- (#5089) Fix a bug where the team color options window can have multiple instances

- (#5092) Fix a bug where civilians would sometimes not be revealed

- (#5092, #5130) Fix a bug where the game would adjust alliances with civilians after the game has started

  Most notable on scripted maps that adjust the alliance with civilians to suit the need of the map

- (#5123) Fix a bug where the 'OnUnitKilled' callback did not trigger

  Most notable on the 'Zone control' maps that relied on this callback to provide credits for destroying other units

- (#5131) Fix a bug where projectiles would have no launcher defined

- (#5136) Fix a bug where vision markers would not align with the terrain

  This does not impact your intel, it fixes a visual artifact

## AI

We would like to remind people that various mods provide different AI experiences. We can highly recommend you download them from the vault and give them a spin too.

A short list of AIs we recommend at this point:

- M27: made by Maudlin
- RNGAI, as made by Relent0r
- Sorian Edit, as made by Marlo
- Uveso AI, as made by Uveso
- Dilli Dally, as made by Softles
- Swarm AI, as made by Azraeel

And not to forget the AI that ships with the Total Annihilation mod that is maintained by Dragun.

### AI - improved framework

Github references: #4693, #4858, #4898, #4923, #4921, #4961, #4901, #4970, #4971, #4872, #5008, #5009, #5072, #5068, #5071, #5087, #5084, #5101, #5099, #4879, #5141, #5139

Before this patch, there was no 'natural' approach to creating an AI that would be entirely separate from all the other AIs. It wasn't uncommon for AIs to be (temporarily) incompatible because of this. With this new AI framework, you can create a new AI that is guaranteed to be entirely separate from other AI instances.

As a consequence of this, all AI mods need to update how they set up their AI. We informed them of this months ago and helped them with these changes throughout June and we expect to see quick updates right after the patch of the AI mods that are still actively maintained.

One notable change is the integration done by Relent0r of the transport logic of the LOUD AI that is developed by Sprouto. Our gratitude towards Sprouto for turning the transport logic into a module and the willingness to share that with us

### AI - improved Adaptive AI

Github references: #4825, #4836, #4849, #4832, #4880, #4888, #4859

With this patch, the first notable improvements specifically the adaptive AI are in! It can by no means compete with AIs such as M27, but at least the AI won't bug out as often as it used to. This represents the first step in the right direction where a lot of time was put into creating a more consistent foundation.

### AI - reclaim grid

Github references: #4811, #4819, #4825, #4832, #4861, #4919

The reclaim grid represents an abstract, highly efficient data structure that the AI can use to make more informed decisions based on reclaim values. Includes a UI window to visualize the data structure

### AI - presence grid

Github references: #4930

The presence grid represents an abstract, efficient data structure that the AI can use to make more informed decisions based on what area of the map the AI thinks it controls. It divides the map into sections that are considered 'allied', 'contested' or 'hostile' while taking into account the path ability of the map. Includes a UI window to visualize the data structure

### AI - navigational mesh

Github references: #4589, #4874, #4876, #4909, #4899, #4918, #4922, #4919, #4925, #4929, #5023, #5031, #5032, #4879

The navigational mesh represents an abstract, efficient data structure that the AI can use to understand how to navigate the map. It is generated at the start of each map. This developer iteration reduces the generation time. On top of that it introduces various functions that can compute interesting properties based on the navigational mesh. Includes a UI window to visualize the data structure

## Graphics

- (#4826) Improve the fidelity of debris of units being destroyed

- (#4828) Improve the quality of the explosions of units

- (#4881) Enable all props (rocks, trees) to cast and receive shadows

- (#4914) Add a bloom intensity slider to the graphics settings

- (#4915) Reduce decal flickering on maps with noisy heightmaps

  A note to people that create maps: this engine is not built for sharp edges and in general noisy-like terrain. It doesn't just hurt gameplay but it can also introduce various visual artifacts

- (#4995) Fix an inconsistency when the effects of the Seraphim regeneration field are applied to underwater units

- (#4977) Improve the death animations of the Colossus, Spiderbot, Megalith and the Fatboy

- (#5033) Death weapons can now knock over trees

- (#5066, #5079) Add the impact effect of the Wasp

### Graphics - physics-based rendering (PBR)

Github references: #4738, #4737, #4870, #4963, #4999, #5004

We started the path toward physics-based shaders in the first developer iteration of 2023. In this second iteration, we continue making preparations and improvements to be able to release the full potential of what this game can look like visually.

One notable change is the introduction of a texture channel that was missing for the majority of the Cybran units. As a result, Cybran feels less bland and bits that represent lights now also appear to emit light accordingly.

### Graphics - adjustments to water

Github references: #4900, #4931, #4895, ##4896, #4964, #5005

Over time various visual artifacts related to water were introduced by FAF. Thanks to BlackYps we did not only tackle those inconsistencies but also improved the fidelity of the water in general. Units now really feel submerged in water, especially noticeable for large units (wrecks).

### Graphics - terrain shaders

Github references: #4902, #4972

We've learned a lot while working on the physics-based shaders for units. Empowered with that knowledge we'll also be tackling the terrain shaders. The direction is not yet set in stone but the first improvements are in that allow map authors to add map-wide normals and map-wide shadows that are part of the rendering pipeline of the terrain, instead of 'plastered' on top afterward!

## Performance

- (#4801) Reduce the overhead of the economy status bar

- (#4810) Improve the performance of LazyVars by reducing table trashing

- (#4831, #4835) Improve performance of shield effects by reducing table trashing

- (#4624) Improve the performance of projectiles by reducing table trashing

- (#4848) Improve performance of `table.getsize`, `table.empty` and `table.getn` with assembly alternatives

  One notable change is that these functions now expect a table, as suggested by it being a table function

- (#4853) Improve performance of the builder manager of AIs

- (#5021) Further sanitize the LODs of units, props and tarmacs

  In the first development iteration, we introduced a blueprint procedure to allow us to tweak the Level of Detail (LOD) of all units and props in the game. The initial parameters were too optimistic and traded in average unnecessary detail for quite a dip in performance on weaker systems

- (#5124, #5132) Improve performance by prefetching assets that the game would otherwise trash again and again

  To reduce the memory footprint various assets are only temporarily allocated. A common example is a unit animation. When a unit starts an animation the asset is loaded and interpreted from disk. When all animation instances are destroyed the asset is removed from memory again. Each time the asset is retrieved it involves a disk operation, and disk operations are expensive

  We've experimented with prefetching before but this time is different. We found a way to see exactly what the engine is doing. As a result, we know what assets are constantly being trashed, just to load them again not long after. In a fifteen-minute replay, some assets could be reloaded up to 50 times, which is rather excessive.

  With that information available we now apply targeted prefetching: we prefetch all assets surrounding projectiles, effects and animations.

## Other changes

- (#4787) Remove generated indices in AI tables

- (#4698) Improve the wording of the recall feature

- (#4654, #4643, #4847, #4651, #4651, #4850, #4865, #4652, #4655, #4968, #4868, #4993, #4998) Tidy up various scripts

- (#4885) Fix an inconsistency where the construction menu of the Megalith had a different order of units than the land factory

- (#4912) Fix an inconsistency where the wrong strategic icons were applied to Cybran shields

- (#4973) Introduce a hotkey to store a camera position across games, useful for taking a screenshot with exactly the same angle

- (#4994) Removal of the following hotkeys:

  - Recheck targets of weapons of selected units
  - Filter the selection to the most advanced engineer, all other engineers assist that engineer

  The latter didn't fit in with the idea of automation. Instead, you can do this manually by using the selection subgroups functionality

- (#4960) Introduce extensive documentation on how mods work in FAF

- (#5024) Add various anti-cheat guards for UI callbacks

## Contributors

- BlackYps (#4737, #4738, #4881, ##4896, #4895, #4931 #4900, #4902, #4964, #4963, #5005, #5004, #4972)
- 4z0t (#4787, #4820)
- Jip (#4801, #4811, #4819, #4824, #4835, #4825, #4836, #4693, #4624, #4848, #4847, #4846, #4853, #4861, #4862, #4863, #4867, #4589, #4869, #4874, #4876, #4858, #4898, #4909, #4899, #4914, #4915, #4918, #4922, #4921, #4919, #4925, #4927, #4877, #4928, #4928, #4929, #4902, #4942, #4930, #4961, #4901, #4970, #4973, #4992, #4993, #4998, #4994, #5008, #5009, #5021, #5023, #5026, #5028, #5031, #5032, #5034, #5033, #5040, #5066, #5079, #5024, #5107, #5092, #5123, #5099, #5130, #5124, #5131, #5132, #5135, #5141)
- Relentor (#4811, #4774, #4849, #4832, #4880, #4888, #4971, #4872, #5072, #5068, #5071, #5087, #5084, #5101, #5099, #4879, #5139)
- Hdt80bro (#4698, #4960, #5089)
- Scarress (#4831)
- Rowey (#4654, #4643, #4651, #4850, #4865, #4904, #4912, #4652, #4655, #4968, #4868)
- KionX (#4848)
- Penguin (#3823)
- Strogo (#15)
- MadMax (#4885)
- Evildrew (#4885)

A work of art is never finished, merely abandoned

Hello Jip, I noticed that something is wrong with the UEF support drones on the Comander in the game. These no longer fly off or do not support every build command.2aba8f34-e259-4058-8fb8-8237edc625e0-image.png 02a7b200-c578-471c-9ca6-f368e1cd1bfb-image.png Or got stuck.

9ae22ff5-4be0-4aec-ae7c-167ad3ca58b3-image.png 50cfe73a-7e3c-4283-9089-9cefd8fe9ee0-image.png b60b61bf-1841-4463-bebd-b5fdb42c1e3e-image.png I researched the drones again. Now they support, but no longer fly.

6893228b-e8ef-4daf-a4c0-0c2b0c15efee-image.png

That is odd, I'll look into it!

A work of art is never finished, merely abandoned

3112a8fa-fc40-4453-a92b-4a9b76ce6493-image.png With 1 drone it seems to be going halfway.

I will test it again tomorrow on a different map and without a mod.

@saver You are not supposed to test anything with mods on.

ed0e5f47-c052-4956-81c0-64966f8073df-image.png Unfortunately I have the same error in a vanilla map, without mods.

Here is an excerpt from the ingame log:

EBUG: ACU PlatoonHandle found. Builder CDR Assist Engineer. Disbanding CDR platoon!
DEBUG: ACU PlatoonHandle found. Builder CDR Assist Engineer. Disbanding CDR platoon!
DEBUG: Current gametime: 00:07:00
DEBUG: ACU PlatoonHandle found. Builder CDR Assist Engineer. Disbanding CDR platoon!
WARNING: AI WARNING: Platoon trying to disband ArmyPool

5c07ca82-017b-4fba-b24e-473a7eee45a2-image.png

I'll dive into it 👍 , thank you for the replay

A work of art is never finished, merely abandoned

I think we need to remove those AI log statements so they don't confuse users. Also I think the transport debug is still enabled.

I've updated the patchnotes with a small section on visual changes, in particular about water. The images are sliders - you can slide it to see the old (left) and new (right). By default it shows the new visuals

@Saver I'll dive into your bug report later

A work of art is never finished, merely abandoned

@jip Those sliding images are a great mechanic. Any chance we'll be able to do to this on the Forums?

"Design is an iterative process. The necessary number of iterations is one more than the number you have currently done. This is true at any point in time."

Newest map: luminary.png

@indexlibrorum no as it is custom CSS code

"The needs of the many outweigh the needs of the few" - Spock

@rowey I figured, sad 😞

"Design is an iterative process. The necessary number of iterations is one more than the number you have currently done. This is true at any point in time."

Newest map: luminary.png

@Saver your bug report did get processed and it should be fixed now.

Added the full changelog in the second post, as of writing the game patch has been released!

For those wondering: where did my precious Sorian AI go? Well - to the vault! With thanks to @relentless it is preserved as a mod:

e0b51258-d06e-4564-9973-739ebde6ff6b-image.png

Do note that the mod will likely not be maintained. It also does not support the navigational mesh, which means you require the marker generator of Uveso to have a proper Sorian AI experience on the average map

A work of art is never finished, merely abandoned

It's such a shame to see that nobody is controlling the programming power. Instead, redundant projects and relatively less important projects are being implemented, rather than addressing the relevant and more fundamental problems.