Foundry 42 DE



AI

For AI, 2017 started with a one-week summit in the Los Angeles studio: we went through several topics that will be important for the improvements we want to do during the new year.

In the past few weeks, we’ve been getting the core functionalities of Subsumption into the Subsumption Mission System. The goal is to give designers the tools to create a larger variety of missions as quickly as possible. To achieve that, we have been implementing a way to reuse a piece of logic through the creation of “functions.” Functions can either have a “global” or “local” (to one activity or one mission) scope and they dynamically generate a task that can be used as a regular Subsumption task.

Going through the Crusader missions and rebuilding them in this new tool allowed us to identify and reorganize the functionalities that are currently required by designers to create their own logic. Just to give you some idea of the work done, here’s a description of some of the functionalities we recently worked on:

Added a task to enable/disable markers in the environment for the mission owner Ability to spawn dynamic Action Areas in the environment and react to the events they generate Support for the InteractiveObjects to correctly handle the callbacks sent to the mission system Added support for tracking dynamic spawning of the entity and the ownership of the requests. This will allow us to allow entities to despawn only other entities they owned. Also it makes much easier for a mission to clean up the resources created. We improved the debug draw functionalities of Subsumption and the mission system and also added network support for the mission log (This is a sort of personal storage for the logs of each mission) We created a SimpleAudioComponent that allows the mission system to communicate directly with the mission owner’s client We added a functionality to allow the spawning system to filter and limit the spawning of entities to specified Action Areas We added the basic support to spawn Subsumption Platform/Layers (We will give you more details about this in the upcoming weeks)

For the character AI, we have continued the work for finalizing the changes in the Cover System and the Posture Manager to allow those systems data to be correctly exported inside Object Containers and used at runtime in non z-up environment. We’ve also been prototyping AI Characters reacting to players bumping into them by making sure that the movement code understands when progress over the movement cannot be achieved due to the player interrupting the character movement. We also continued our refactoring of the spaceships flight control, we are moving towards removing some layers of complexity and make more direct use of the IFCS from the AI perspective. This will allow us to benefit from any improvements made for the player in a much more straightforward way.

Quality Assurance

DE QA like to refer to the month of January as the “catch-up” month and used this time to tackle various test requests that required additional information as well as clearing out any Editor regression from Game-Dev that at the time was of a lower priority than regression in 2.6. We also spent a majority of January revamping our existing Editor checklists and documentation, as well as providing additional Editor training for testers in our UK office.

Additionally, we reviewed Star Marine feedback from our community and acted upon this feedback with test cases to provide additional information for our design team. The QA team also decided to review our existing sanity checks with Production and decide which were still useful to the team and which checks could be removed completely. We also used this opportunity to go over new bug tracking procedures with Production, so that we were all on the same page regarding labels that are used in our daily QA filters. Ivo Herzeg also kept us busy with changes made to the 1st person camera system, in which we were required to test all game modes. DE QA closed out the month with testing for Chris Bolte in order to track down a ZoneSystem crash that was plaguing our community in the latest 2.6 live release. We managed to finally reproduce this issue with 9 testers total (2 from DE and 7 from UK), which allowed Chris to narrow it down to being a logic error. Additional debugging was added to our Game-Dev branch and we will be attempting another playtest to reproduce this issue on Game-Dev, so that it can be finally fixed once and for all.

Cinematics

Part of the Cinematics team is currently in a sprint to push towards a “final” look and feel for the conversation system that is used for talks between the player and NPCs (which the S42 campaign features a lot of).

This includes topics like:

UI text placement and animation for dialogue choices

Solving issues of: If, how and when to slow a player down running towards an NPC .

How to make “gentle” collisions between physics capsules when the player violates personal space by getting too close.

How to adjust recorded performances and manipulate the actor’s Look or even Body pose to match for a changing player position. (we call that performance transformation)

Dynamic camera effects that kick in when the conversation is initialized both in a change of FOV and Depth of Field blur increasing.

We want our conversations to feel “filmic” while still allowing the player freedom. Invoking a “cinematic” feel first and foremost means changing the lens to values that are more akin to how a film camera would depict a character. The engines FOV traditionally is calculated with a vertical FOV value. The current in-game on-foot FOV is at 55 which is equivalent to an extreme wide angle lens of approximately ~13mm (using 35mm film equivalent ARRI master prime lenses as a comparison). That kind of lens is bordering on fisheye lens territory. If the player gets close to a character using this kind of FOV it distorts faces, so what we are doing is gradually changing the FOV over a certain time down to 30 which is equivalent to a ~25mm wide angle portrait lens. We are finding this is a nice compromise of the faces revealing all of the awesome scanned detail by appearing big on screen while still allowing for a sense of orientation in regards to the background (if player decides to move during a conversation).

Engine

Work has started on our internal Solar system editor (SolEd), with a “top/down” universe view. We found that a custom editor extension became necessary due the massive scale of our solar system. It’s now possible to drag and drop Object Containers containing planets, space station etc., and see in real-time planets and objects moving while zooming all the way from a galaxy view down to grains of dirt on a planet. Ongoing work continues on procedural objects distribution on planets, scattering of large rocks on moon’s surfaces, initial passes of objects and vegetation blending with the planet terrain surface, improvements on particles distribution and vegetation / wind on a planetary scale. Initial passes on spawning Object Containers like small outposts on the planet surface, and initial work on adapting them to the environment with adjusting their parts to the terrain and blending the colors to make them more visually integrated like they were actually placed by Humans in the environment wrapped this month. And additional improvements have been added for large scale planet rendering like glossy surfaces and more artists controlled parameters.

There also has been effort towards reintroducing static code analysis as a mandatory part of the TryBuild system, Zone system fixes / optimizations, ongoing work on the new pak system for the patcher updates, and fixes and support for 2.6.1.

Tech Art

The Technical artists in Frankfurt have been busy supporting FPS features and weapons for 2.6. They improved the weapon IK grip setup, now almost all weapons are using the runtime IK grip which helps us to change left hand poses per weapon while keeping base animation the same. They also created new cVars for previsualizing and testing new weapons in the engine with all their functionality. On the Engine side, we are participating in R&D efforts to improve foot planting in game and we’ve already started seeing good results.

Design

The Level Design team in Frankfurt is prototyping the modularity systems for Satellites, Surface Outposts and Space Station Interiors which is almost complete. Currently, the Environment Art team is providing us with greybox versions of the components that we will use to assemble the modular locations.

With our locations, the main goal is always to use them to complement upcoming systems, provide a base for future game play, as well as add to the feeling of a living, functional and realistic universe. This doesn’t always mean that the gameplay related to a location will be available when we release the station template, rather we try to ensure that once said system/gameplay becomes available we already have the location required. For this reason (and as seen on previous ATVs) we are continuing our work on the Truck Stop, Refinery and Cargo Station, the first design phase of these is complete and they have now been handed over to the Environment Art team.

The System Design guys have been refactoring our usable system to allow both AI and players to make use of the same objects at the same time (such as AI and player sitting at the same table, interacting with each other). We’re also adding support for multiple actions to be performed while inside a usable and smoothly transitioning between these actions (character sitting at a table can be eating, talking, scratching his nose, sleeping with his head on the table etc.)

The Oxygen, Breathing & Stamina systems have started being implemented and soon we will have players begin to carry their own oxygen supplies or risk turning blue in the face. The system should handle everything from how the oxygen tank delivers breathable air to the helmet, to how the player breathes said air and how his body converts that into actual usable stamina. At the same time, all actions are being converted to consume this stamina, so you will want to keep your character supplied with oxygen if you want them to be capable of performing various actions.

Landing and Take-off systems are also going into implementation mode as we are unifying Squadron 42 and PU mechanics. The system should easily handle everything from the more basic taking off in the PU to the fully cinematic experiences needed in S42. Basically we’re implementing an air traffic control system that allows players to queue for landing permissions and makes sure that people don’t block landing sites for everyone else.

Small additions were also made to the Mercenary and Bounty Hunter career designs and the systems needed for these. Customs are also receiving some design love as we are start to gate what the player can bring in legally and how smuggling things in high security areas works.

VFX

The Frankfurt VFX team has been continuing to work with the programming team on the tools required to spawn various particles across the planets. One of the more recent additions has been the implementation of planetary wind. Due to the spherical nature of the planets, the wind had to be completely rewritten to work correctly across the surface of a planet. This will help to make the environments feel more alive, from blowing around smoke and dust to rustling the leaves on the vegetation.

Environmental Art

The environment team here in Frankfurt has grown again with two new people joining the team this month. With the increased amount of environment artists, we’re able to put even more effort into our procedural planet tech. We’ve been recently building great looking assets for individual moons, as well as refining our procedural tech and tools for moons, full planets, and full systems. One key element of the planetary tech that we’ve been focusing on is the procedural scattering system, which will allow us to procedurally scatter rocks, plants, trees and other elements across planets based on artist defined rules. While the tech is still in development, the first automated results are already promising and are improving every day.