tl;dr still not out
TO: SQUADRON 42 RECRUITS
SUBJ: DEVELOPMENT UPDATE 08:03:2022
REF: CIG UK, CIG DE, CIG LA, CIG TX
FAO Squadron 42 Recruits.
Welcome to July’s Squadron 42 development report. Enclosed you will find details on the latest progress made across the campaign, including updates to Vanduul movement, level design, and character art.
Thank you for your continued support of Squadron 42.
Last month, AI Content dedicated time to bug-fixing existing features. They identified the top 20 usables that the AI interact with and set out to fix as many issues as possible in two weeks. The issues were triaged and arranged into three categories:
Bugs that the AI designers could solve
Bugs that AI animators could solve
Code issues not solvable by AI Content
By the end, approximately 50 issues had been solved before the team returned to feature work.
July’s feature work included supporting the weapons vendor setup by creating weapon pickup and place animations, progressing with the locomotion polish mentioned last month, and retargeting overlay animations to the female skeleton.
The AI designers continued implementing the dynamic conversations feature, expanding it to the eat-and-drink behavior. Now, NPCs can have conversations between bites or drinks.
“We are pleased with the result, as it makes the AI feel less individual and more connected with other NPCs.” AI Content Team
AI engineers will now also seek out colleagues at wall panels and work zones (e.g. broken pipes) to start conversations. They’re currently working on implementing chatter for AI in bunk beds and arcade machines too.
For human combat, AI Features continued to work on tactic selection, including implementing a more data-driven approach to setting up the scoring factors in Data-Forge. This will allow the designers to quickly tweak values to produce the best possible range of combat behaviors for the situation, including with multiple combatants with different setups and ranges. This solution extends the ‘function selection’ in Subsumption to allow the game code to register a custom probability calculator, which will provide benefits in general, not just for combat behaviors.
They also began aligning the existing perception systems to a new design where the perception meter rises depending on different stimuli (hearing footsteps or gunfire, seeing a target, etc.) and falls over time. Once different threshold levels on the meter are hit, they trigger different alertness levels that determine specific reaction animations and behaviors. For example, at the lowest level, the AI will react by simply turning their head toward the stimulus. At the middle level, they will investigate the stimulus and, at the highest, they will enter combat. Stimuli can also impact the meter in different ways based on the conditions of the target, including whether they’re crouched or standing and the location’s lighting.
Work also started on the investigation behavior, with the devs implementing a system to allow NPCs to determine potential enemy hiding spots, check them, and keep track of which ones they’ve seen. The next stage is for NPCs to share information so they can cover a level together.
They’re also working to improve the consistency of cover selection using the automatic cover generation system. They’re also planning to improve the quality of cover and provide more information to the AI so that less decision making has to be made at runtime.
They also blocked out animations for human-AI mantling and vaulting to give NPCs more locomotion options when moving around the environment. Clean-up and timing tasks were also completed for the spec-ops animation sets.
For the Vanduul, the team blocked out several animations, including piloting, and some location-specific animations used to get the Vanduul from their spawn positions (often off the navigation mesh) into the level.
During July, AI Tech focused on extending the functionalities required to traverse navigation islands using special actions. This included implementing new adapters for navigation links to include mantling, jumping down, and vaulting.
“The basic idea is that, using all the existing markup, we want to allow NPCs to perform similar actions to the player in the environment. For example, we adjusted the ledge objects to include specifications that evaluate the navmesh and link multiple islands correctly.” AI Tech Team
They also continued R&D on seamless transitions into usables. This time, they implemented a cleaner and more reliable system for sharp-turn animations, giving more natural movement to NPCs following paths around corners. This allows helps NPCs feel ‘heavier’ and show weight balancing when moving over sharp corners.
Progress was also made on the locomotion refactor. Last month, the team began improving how AI actors process movement, which will allow them to decouple movement requests from what processes it. This is an important change to better support multiple path-followers used in different contexts. For example, actors, creatures, or NPCs driving a vehicle or pushing a trolley. They’re currently preparing to integrate into the Squadron 42 branch and verify that everything works as expected.
For the Subsumption editor within the sandbox tool, AI Tech implemented new functionality and stabilized the tool to finally open up the usage to all the designers.
A better AI-debug UI using imGUI is currently being implemented to allow the devs to select and inspect NPC behaviors. The tool can split the NPCs present in each zone, select multiple NPCs, and inspect their properties.
Progress was also made on ship reinforcement for Alpha 3.17.1. The team made the feature more robust by adding better monitoring of the disembarking process from the pilot’s perspective. They also added an abort phase for the dropship in case the drop location is occupied, and the pilot can now monitor the presence of a player inside the cargo area.
They also fixed several bugs relating to slow reaction time and desyncs/teleports. These issues are mostly caused by a low server framerate but the devs optimized the code and implemented tweaks to allow the code to better handle some of those situations.
In July, the AI Vehicle Team finished enabling AI to use master modes; AI is now fully integrated with the ability to swap master modes when required by the operator mode they want to use. The designers will also soon be able to cycle modes to give AI access to higher SCM speeds when designing behaviors.
Bug fixes were also made throughout the month, including an issue with the ‘FlyTo’ not computing an efficient path and dive attacks not ignoring driverless space ships.
Last month, the Animation team further developed zero-g movement and navigation, adjusting the feel to give a better overall experience. They also worked on a new SMG, additional weapons for the master-at-arms, ladder interactions, female console use, and locomotion (sharp turns and jukes).
New mobiGlas interactions were developed to give a more realistic feel to characters, and progress was made on the Vanduul, this time searching vents and climbing.
On the facial side, improvements to the facial animations of the named cast members continued.
The Character team spent June focusing on the remaining Navy faction outfits and progressed with the Screaming Galsons armors. They’re currently preparing to create the Shubin mining outfits and work with Tech Animation on head scans for various characters.
Weapon Art started the month bug fixing, closing out around half of their backlog of bugs alongside clean-up work. Progress was then made on the Volt shotgun, pistol, assault rifle, and sniper rifle.
Animation work progressed for the Volt weapons too, and first pass animations and reviews of the new melee weapon metrics were completed.
Work also began on some SQ42-faction-specific weapons, beginning with an SMG and shotgun. The military Multi-Tool had its whitebox updated with new screen positions to ensure the UI will work for the intended gameplay too.
In July, the Physics team made several optimizations to the code. Ray/box overlap checks were implemented in ISPC and are now also used in ray world intersections (RWI) to quickly skip entity parts if there’s no overlap of a ray and an entity’s local bounds. Further optimizations include using a box pruner to process vehicle wheels and all of their possible colliders (and their parts) more quickly, as well as SSE and AVX2 optimizations in the code that searches parts of a physical entity. Additionally, support for successive pulley attachments to rope entities was added, and the spatial configuration of interior grid types was changed to use more layers of internal nodes that are smaller in dimension. This, for instance, helped in Port Olisar, where a lot of time was spent maintaining thunk lists, which is completely removed by this change.
On the renderer, the Gen12 transition continued. For example, Gen12 Scaleform (UI) rendering was enabled by default, support for MIP map generation passes was added, and material overrides for render nodes are now supported, including for multi materials. The depth pre-pass submission is now skipped if motion vectors are rendered. Thread synchronization code in pipeline state object (PSO) cache refreshing as well as in the shader system was improved, and unnecessary stencil tests for the shadow map stage were removed. The render loading thread was replaced by a video rendering thread, which is needed for the sole purpose of rendering UI while the game is loading. Lastly, a bug that was crashing the video driver was fixed and the entire render code was changed to successfully compile via Include-What-You-Use (IWYU). Various issues in the form of buffer overruns in low-level VFX render code were also fixed.
The Gen12 ports of atmospheric and volumetric cloud rendering continued as look-up table generation for atmosphere, as well as volumetric cloud preprocessing steps, were successfully moved over to execute through the new APIs. The rendering of legacy (spherical) clouds was moved to Gen12 too and can now also render as part of the deferred pipeline’s forward stage (which will be enabled soon). This recent progress also resulted in various suggestions (some of which have already been implemented) to refine the Gen12 APIs for special cases so they can be ported straightforwardly and integrate better. Lastly, work on porting the remaining passes for atmospheric and volumetric clouds will commence in August.
On the core engine, entity lifetime code was adjusted for the new needs of server meshing with the goal of it being easier to use as well as creating a more refined feeling of persistence. A time-sliced entity density manager was implemented as a part of the reworked entity lifetime for server meshing. The background job manager was changed to better cope with very long-running preempted background jobs to reduce runtime stalls. For example, stalls during shader compilation. Furthermore, component lifetime now uses a cheaper custom weak pointer approach that the current std::shared_ptr cannot provide. Moreover, StarHash bind culling of sub-zones was significantly optimized. The ability to set hardware (data) breakpoints from code was fixed and, lastly, Linux thread priority changed to use real-time FIFO scheduling.
Gameplay Features focused on support and bug fixing throughout July, specifically looking into performance and polishing recently-worked-on features. New functionality was also added to player choice; this feature now utilizes the same setup used for conversations and allows Design to change whether the text is camera facing along with its size and offset.
Vehicle Features started designing the new multi-function displays alongside the core engineering technology work in the background. The design side is mostly complete, with the focus now on prototypes.
The team also spent time integrating the new resource network that will deliver more interesting and varied engineering gameplay. This will also increase performance as items are used much more efficiently.
Quantum boost was fully integrated into SQ42 and handed over to the designers to enable them to feedback on further level-design requirements. Finally on the tech side, the team continued to support persistent streaming with a transit refactor alongside bug fixing.
Missiles received a complete flight retune after some bug-fixing highlighted problems with the way the missiles were set up. Now, focus is on the intercept portion of flight and controlling accelerations rather than allowing them to be controlled as dynamically as they were before.
The team also began balancing what speeds and tunings are required for the new Master Modes feature, ensuring they get the combat speeds right under normal thrust and boost so combat starts to move in the intended direction.
To help with future ship balance and the introduction of the resource network, the team created a master tuning document that will not only act as a reference point for future ship designs but allow them to set out the requirements of the recourse network balance once it’s handed to Design.
Gameplay Story received a fresh delivery of motion capture early in July, which allowed them to make great strides in several different areas, including creating a whole new scene in chapter 1 and updating the start of another.
They also make a significant update to scenes in chapter 4G, overhauled a scene in chapter 4, and further polished scenes in chapter 4. Maintenance was also performed across various scenes in several different chapters.
The team also looked at the later chapters and began prototyping two new scenes in chapter 10 and made some minor updates to chapter 12.
Graphics & VFX Programming
July saw the implementation of a dynamic bitset data structure, which replaces the TJointBitSet, as well as the investigation and testing of offline damage maps with persistence. The team also worked on separating CPU & GPU implementation, ensuring they result in the same damage map.
The team finished porting Gas Clouds to Gen12 and fixed several issues, including a GPU crash related to this feature. Work began on Vulkan scaleform functionality and particle mesh rendering in Gen12. Progress was also made on porting refraction and light beams to Gen12.
Canvas decal texture streaming was sped up and image testing now waits for it to complete. Support for silhouettes on editor entity objects was added alongside improvements to render-item sorting to make it consistent at different runs.
Hair color and specular improvements were finished for the hair shader. There were also updates to tessellation and displacement on the organic shader. For jump points, the team focused on branching tunnels, which included fixing situations where the connecting segments self-intersect.
The Planet Tech team made improvements to the world and biome builder by moving mesh building to background jobs, substantially reducing stutters in-editor. There were also fixes for mismatching physics meshes on servers as well as a refactor of procedural entities, which improved planet loading time. Four-point Bezier curves were also added to river generation alongside general improvements to the river placement tool. Collision detection was added to RaStar to prevent modules from being placed when they overlap with geometry too.
During July, Narrative focused on completing first-pass scripting and recording scratch dialogue for a large section of one of SQ42’s middle chapters. Design refined the gameplay in this section so Narrative frequently played through these updated enemy encounters, puzzles, stealth, and navigation challenges.
“It’s very important to make sure the player always understands what their current goals are and what their next steps should be so, to that end, the writers have been working to balance dialogue hints to ensure that players who need a bit more guidance will be able to get it without spoiling the fun or challenge of a given area.” Narrative Team
Additionally, as gameplay mechanics were iterated on and polished, the Narrative team adjusted the script to ensure that lines referencing those mechanics matched how the gameplay worked. For example, recent improvements to the radar and scanning system allowed them to streamline some of the terminology used by characters in-game.
The team also looked to expand the use of the dynamic conversation system to enhance the background and enemy NPCs that players will come across. While important key conversations are specifically planned for the player to encounter, there are some areas where the player’s freedom to explore has highlighted the need for additional content to bring it to life. Rather than relying on additional bespoke lines, the team is investigating using dynamic conversations to allow for a much broader range of content to fill the space.
The Tech Animation team continued to invest time into the tools codebase. Years of development and quick fixes are being triaged, consolidated, and revamped to fully conform to their coding standards and modularize the codebase to be more accessible to the technical animators. This will expedite the creation of tools and the pipeline that rely on core processes.
Alongside this, they’re currently developing and integrating several new tool chains: CGA and SKIN loading in Maya, RBF solver development, and SSD & Alembic animation pipeline support. Their future development roadmap is also in planning.
Last month, the UI team continued development of the new Starmap, improving labeling and concepting how to display space clouds in a way that looks great and performs well.
The artists then worked with the game designers to create concepts for several interactive UI screens found around the game.
The team also worked on new doors and airlocks specifically for SQ42, building them to look right in various UI styles and setting them up to support a variety of gameplay scenarios.
Throughout July, the VFX team continued to work closely with Art and Design, supporting all visual-effect requirements for their Q3 milestones.
They also spent time cleaning up and documenting one of their most crucial pipelines: Rigid Body Destruction. The majority of SQ42’s destruction sequences are created in Houdini, then exported into the engine. The visual requirements of the sequence determine the way it’s exported, with two file formats available: CGA, for animated geometry transforms (e.g. building pieces breaking apart) and Alembic, for animated geometry deformation (e.g. bending metal). So, it’s important that the pipeline is robust enough to handle the varying complexity of the destruction sequences without slowing the artists down.