#12 Operations and the Environment

 

SECRET

DigiMastered Works LLC

Office of Development

DMW107IB1012

Date 07/03/2022 11:27 AM

THIS IS FINALIZED INTELLIGENCE

 

To: The People
From: Tanner Fry
Subject: Operations and the Environment

 

Operations and Their Structure

    Grab your coffee and take a seat because this update is lengthy. Over the month of June the Director's operation board has received quite a few changes and enhancements. While building out more functionality to the board, the underlying structure of an operation has increased in size. This was expected but the workload was not. Below we will talk about the overview of the operation system, what an operation contains, and how it is used.

    As a Director, you can use operations to take a more surgical approach while managing and deploying your agents. Instead of performing actions via 1 single agent on the map, an operation allows you to manage multiple agents all at once in a more cohesive manner. With the operation board, you will be able to select and assign agents to perform actions at specific times in order to have a greater chance at getting that sweet sweet intelligence your agency so desperately needs.

A view of the operation board.

Updated Operation Board

    When creating an operation you currently only need to fill out 3 fields. The name, description (which is really just to help you stay organized), and the priority. The important field, priority, specifies how important an operation is to you and the agency. Although subject to change, the priority is expected to be used for visual aids to you when working with your operations. Below you will see the UI for creating an operation.

A view of the operation creation UI.

Operation Creation UI

    Operations are made up of two main components, stages and actions. An operation can have 0 or more stages and a stage can have 0 or more actions.

A view of an operation's stage list.

Stage List

A view of an operation's action list.

Action List

    A stage currently contains 6 fields. The name, stage duration, description, stage type, sphere of influence, and the stage's origin. Below you can find information on each to get a better understanding of their purpose:

  •  
    Name: The name of the stage.
  •  
    Stage Duration: How long a stage will take (Subject to change and may have a minimum based on specific actions and travel time within a stage).
  •  
    Description: A sentence describing the stage. Useful for you as the Director.
  •  
    Stage Type: The function of the stage. To help you categorize actions within an operation.
    •  
      Initial: Contains actions that should be taken at the beginning of a stage such as moving agents to a desired location, gathering tools, or other.
    •  
      Research: Contains actions for understanding a specific location/object/intelligence or for understanding new technologies needed for an operation.
    •  
      Reconnaissance: Contains actions for gathering basic intel for an operation.
    •  
      Development: Contains actions for building locations/posts/equipment/tools or other needs for the operation.
    •  
      Deployment: Contains actions for agents moving on a target, deploying equipment, performing combative means, or other needs for the operation.
    •  
      Cleanup: Contains actions that minimize exposure, gather the dead, destroy necessary equipment/information, or other.
    •  
      Complete: Contains actions that should be taken at the end of a stage such as processing intel, decrypting/encrypting information, or other needs.
  •  
    Sphere of Influence: The area of influence a stage has.
    •  
      General: A general area where a stage occurs.
    •  
      Point: A specific location where a stage occurs.
    •  
      Mixed: A combination of general and point.
  •  
    Origin: The original location where a stage begins.
A view of an operation's stage creation UI.

Stage Creation UI

    An action's fields are not currently setup but will consist of similar items: Action type, location, duration, assigned agent, and other fields depending on the action type. For example, the action of researching technology may require a building selection or a specific technology to research while the action of reconnaissance (remember, stage types are just a categorization of actions) may require selecting a location and any necessary tools depending on the types of reconnaissance performed.

    Throughout your journey as a Director, you will find that operations can be used in a variety of ways to understand what you need, how to get it, and when. Not only that, but operations allow for a systematic approach versus a chaotic one. When you've setup an operation, the final action you need to take is before you, and that is when to use it. You've setup who is involved, how they're involved, and what may be involved, but you haven't setup when it all goes down. The last step is to "Initiate" the operation.

    When you initiate an operation, your agency begins the process of fulfilling the requests that you've so tirelessly built out. At the first stage, assigned agents to the operation begin performing their actions at your designated locations. After a stage is complete, the operation automatically goes onto the next stage and so forth until the last stage. Once all stages and the actions within each stage are completed, then the operation is finished. You may receive an intelligence report, a desired outcome such as a building being sabotaged, target being assassinated, or some other valuable depending on how the operation was setup.

    Note, you can setup as many stages as needed so if you want to setup intelligence reports within the operation, then that is intended to be possible. One thing to keep in mind, most of this is still being built out and is not fully functional. It's subject to change. On another note, the ability to modify an operation on the fly is something that will bring a whole other can of worms into the mix but it is a feature we're wanting to implement at a later point in time.

Updates to the Operation Board

    As discussed in our last article and what you've read above, we've focused heavily on the Operation Board as well as the backend that services the events and data that flows to and from the board. We've talked about what an operation does, what it contains, and how it is used. Here you can see how to create an operation.

Creating an Operation

    As previously mentioned, operations contain stages and stages contain actions. Each operation can have 0 to many stages and each stage can have 0 to many actions. Below you can see how to create a stage.

Creating a Stage for an Operation

   Each action has an agent assigned that will perform the action. Agents can have tools, equipment, and weapons that enhance their ability to perform an action or may even allow them to perform an action. Unfortunately, we haven't quite setup the action creation UI but the backend is there.

    Over the next month or so, actions will be setup thus completing the final step needed before we start testing the system as a whole. When the system is in a stable state, the plan is to create a simplified version that minimizes the needs to fine tune an operation. The simplified version may just have a few buttons, drag and dropping agents to the new operation/stage, and selecting the actions for the agents.

Procedural Environment Generation

    With the core functionality for the operation board coming together, a focus on other elements of the game was desired. Over the last week some basic procedural generation was setup for clustering and spawning the environment. 

    It's not as complex as the map generation that we implement but certain environment entities spawn and respect their biomes such as evergreens spawning near mountains and palm trees near beaches. Current environment entities entail palm/evergreen/oak trees, bushes, and mountains. 

A view of an operation's action list.

Overview of Our Procedurally Generated Environment

    Our environment generation is not what most would consider true procedural generation. It's not based on an algorithm or any complex math but instead on a very simple set of instructions. Our map is an array of arrays, a 2D array, where each pixel is a cell within the 2D array. We loop through the entire map at specific intervals and shoot ray casts from the camera to the map. In the examples shown below, we use an x/y interval of 20. For every 20 pixels in the x and y direction, we shoot a ray cast and check what color the map pixel is. Given the color, we can know the "region" which is then used to spawn specific environment objects.

    Based on the region, we randomly decide whether to generate an environment object at that point. If the region is sand, then we can only spawn palm trees. If it's grass (the lighter green), we can spawn oak trees. If it's the darker grass then we can spawn evergreens and so on. Here are some visualization of the ray casts hitting the map.

A view of an operation's action list.

Ray Cast Visualization From Unity Editor: #1

A view of an operation's action list.

Ray Cast Visualization From Unity Editor: #2

A view of an operation's action list.

Ray Cast Visualization From Unity Editor: #3

    During random environment object spawning, we store each object in an array depending on its type. After random spawning is finished, we then perform a simple cluster. We look through each object type's array and randomly select some objects to be references for clustering. We then generate 1-10 objects placed in any direction, at a min/max distance, around the currently selected object.

    More checks and validation need to take place during spawning. For instance, in the image below you can see that some palm trees spawn in the water. This is not desired. There are also some visualization issues with object layering. It can be seen in the below image as well. If you look at the clusters of trees, some trees that are towards the top of the image can sometimes be on top of another tree in its vicinity. This breaks the feeling of depth and is not a desired outcome. 

    One way to fix the depth is to loop through each object type array, find objects in its vicinity, and then move the 'z' value negatively for any objects with a higher 'y' value, thus placing the object with a higher 'y' value behind an object with a lower 'y' value. This could be resource intensive and time consuming so it may be important to create an array of arrays for clustered objects of a region so as to minimize the amount of objects to loop through for a given check/validation. There may also be a need for a sorting algorithm but the verdict is still out.

A view of an operation's action list.

Procedurally Generated Environment: Detailed View #1

A view of an operation's action list.

Procedurally Generated Environment: Detailed View #2

A view of an operation's action list.

Procedurally Generated Environment: Detailed View #3

Showcasing the Procedurally Generated Environment

    More enhancements to the environment will come such as enhancing environment lighting through normal maps, more entity variation, animals (possibly, birds are most probable), entity and environment liveliness (tree swaying, maybe grass), and more.

    That's all for June's development update. Hopefully you enjoyed the content and if you have any suggestions on certain topics that you'd like to know more about, then head on over to our forums and let us know. You can also email our support at Support@digimasteredworks.com.

Roadmap (Note: Roadmap has shifted)

Milestones To Do:

  •  
    2022 Q3 - Development of core mechanics and game story
  •  
    2022 Q4 - Internal testing of core mechanics and Alpha testing
  •  
    2023 Q1 - Internal testing continued with review of core engine and mechanics
  •  
    2023 Q2 - Expansion of core features and Beta Testing
  •  
    2023 Q3 - Add enhancements from Beta Testing
  •  
    2023 Q4 - TBA

Milestones Completed:

  •  
    2021 Q1 - Initial designs and planning
  •  
    2021 Q2 - Initial designs and planning
  •  
    2021 Q3 - Initial designs and planning
  •  
    2021 Q4 - Development of core engine
  •  
    2022 Q1 - Development of core mechanics and game story
  •  
    2022 Q2 - Development of core mechanics and game story

SECRET

Approved for release: 06/30/22 ID: IB1012

1