Menu
Lumberyard
Developer Guide (Version 1.11)

Tactical Point System Overview

Key features of the Tactical Point system (TPS) include:

  • Use of a structured query language

    • Powerful and quick to change in C++ and Lua

  • Query support for a variety of point characteristics, beyond conventional hiding places behind objects:

    • Points near entity positions

    • Points along terrain features

    • Points suggested by designers

    • Arbitrary resolutions of nearby points in the open or on terrain

  • Query combinations, such as:

    • "Find a point somewhere behind me AND to my left, AND not soft cover, AND not including my current spot"

    • "Find a point hidden from my attention target AND visible to the companion"

  • Preferential weighting, such as:

    • Find a point nearest to (or furthest from) a specified entity

    • Balance between points near an entity and far from the player

    • Prefer points in solid cover over soft cover

  • Query fallback options, such as:

    • Prioritize good cover nearby; if none exists, go backwards to any soft cover

  • Query visualization:

    • See which points are acceptable and which are rejected, as well as their relative scores

    • See how many expensive tests are being used by a query and on which points

  • Automatic query optimization

    • Understands the relative expense of individual evaluations comprising queries

    • Dynamically sorts points based on potential fitness, according to weighting criteria

    • Evaluates the "fittest" points first, in order to minimize the use of expensive tests

    • Recognizes when the relative fitness of a point indicates that it can't be beat, in order to further reduce evaluations

    • Provides framework for further optimization specific to architecture, level, or locale

In addition to these key feature benefits, this framework offers these advantages from a coding perspective:

  • Separates query from action

    • Arbitrary queries can be made at any time without changing the agent's state

  • Query language is easy to expand

  • Easily adapted for time-slicing (and in principle multi-threading):

    • Progression through query is fine-grained

    • Progress is tracked as state, so it can be easily paused and resumed

  • Provides mechanism for delaying expensive validity tests on generated points until needed