class for all objects in the game and it would be used to store objects in a world state. Now to test one object against another, a mechanism was required to convert from the base object to the real object (i.e. OBJECT to path node, AIModule etc.) so that custom tests could be run. While this conversion may have been possible, there existed a bigger problem and that was deciding how the variables were represented when used in actions and goals. Basically, how could a world state symbol that is a variable be represented for preconditions or effects if its value can’t be pre-determined in the C++ code? No solution to this question arose throughout implementation and so it was decided to instead just go with the Boolean approach which had a clear cut solution available.
Using just Boolean symbols brought about their own challenges. The limitation of Boolean symbols in the planner was something that caused problems when implementing the actions and goals initially. The major issue surrounded movement of the agent. The original design was to have a single world state Boolean symbol to handle movement called atTargetNode. The atTargetNode symbol was supposed to be updated by the navigation manager. If the agent is at its final destination then the atTargetNode was set to true, otherwise it was set to false. It was planned to have a GoTo goal that was satisfied if the atTargetNode was set to true. Alongside the GoTo goal there was going to be a GoTo action which has an effect of setting the atTargetNode symbol value to true. When the GoTo action is activated, it would inform the blackboard of the new navigation target which in turn moves the agent. So, suppose the agent is at its final node and has no new destination, then the atTargetNode world state symbol is set to true. Now if the GoTo goal becomes relevant (e.g. an order is received from the squad manager to go somewhere) then for the goal to be satisfied, the atTargetNode symbol must be true. The planner will attempt to find actions to satisfy the GoTo goal but realises the agent’s current world state already satisfies the goal state, quits out and doesn’t create a plan. The solution to this issue was to never actually set the value of the atTargetNode world state symbol for the agent’s current world state. The agent starts off with the atTargetNode symbol being false. The symbol’s value is only