Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

Designing Towers of Aghasba’s Interaction System

One of the earliest systems I designed for Towers of Aghasba was the interaction system. Throughout the game’s development, this system continued to evolve and became one of the core systems in the game that was used to trigger SEVERAL different systems.

Issues with old interaction system

The initial interaction system that existed required the player to point the center reticule at every interactable actor to interact with it, similar to Valheim.

While simple to implement and familiar to most players, this meant the player needed to keep looking down at the ground to interact with small items, which were common.

  • The player needed to keep moving the camera up and down constantly every time they had to interact with an item.
  • It did not allow the player to focus on the beautiful world around them since they had to constantly keep looking at the ground.

Goals for the new system

I suggested a re-design to the interaction system that:

  • Was intuitive and easy to use for the player.
  • Allowed the player to spend more time looking around at the world than at the ground.
  • Flexible for designers to setup.
  • Expansive to be repurposed for different kinds of interactions in the game.

New Interaction System

The newly designed interaction system would search for the most appropriate actor for the player to interact with and highlight it with an interact prompt, similar to how Ghost of Tsushima handled interactions.

The different aspects of this system are:

  • Detecting Interactables
  • The Interaction UI
  • Handling Interaction Types

Detecting Interactables

The system’s intent is to highlight the interactable actor that the player is most likely to want to interact with based on what’s in front of the player’s mesh and where the player’s camera is looking. The search for the appropriate interactable actor will be done based on two layers:

  • The Area in front of the Player
  • The Player Look Direction

The range within which the Interactable Actors can be detected is the Interaction Range. This range will be of a certain range (InteractionRadius) and be centered a certain distance (InteractionDistanceFromPlayer) in front of the player.

The Player will also have a Priority Point that is a PriorityPointDistance in front of them to which the distance of Interactable Actors within the Interaction Range will be measured. The Actor closest to the Priority Point is taken as the Actor that the player can interact with.

The Interactable Actor that the system will pick for the player to interact with will be the Focused Interactable Actor.

The steps taken to find the Focused Interactable Actor are:

  1. Find Interactable Actors in the Interaction Range. If only one actor exists, that actor is taken as the Focused Interactable Actor.
  2. If multiple Interactable Actors exist within the Interaction Range, check for Actor closest to the Priority Point, which will be taken as the Focused Interactable Actor.
  3. If two Interactable Actors are equally close to the player within the Interaction Range, then the one to the right of the player is considered as the Focused Interactable Actor (Closer to where the camera is looking).

Parameters to be exposed to designers

ParameterDescription
InteractionRadius (Float)The Radius of the Interaction Range that will detect Interactable Actors.
InteractionDistanceFromPlayer (Float)The distance of the center of the Interaction Range in front of the player.
PriorityPointDistance (Float)The distance in front of the player within which the Interactable Actor will be prioritized as the Focused Interactable Actor.

Prototype

Final Implementation


Interaction UI

After an interactable is detected, the next part to handle is highlighting the interaction information to the player.

Because of the artstyle and established art-direction of the game, we couldn’t make interactable entities visually distinct. That means we had to rely on UI elements to indicate interactables and how to interact with them. But another requirement with the art direction was to keep the UI to a bare minimum.

The bare minimum in our case would be:

  • Clearly highlighting the currently interactable actor.
  • Showing available interactions with that actor.

Highlighting Current Interactable

To keep the indicator of the interactable as minimal and non-intrusive as possible, we decided on a simple icon to appear on the interactable in screen space.

Designers could send the Z-height at which the interaction icon could appear over each interactable actor individually if required as well.

Showing available interactions

Different types of actors have different interactions. You can “talk” to NPCs, “Harvest” resources, “use” crafting stations, etc.

The available interactions for the current interactable are listed at the bottom-middle of the screen as a linear list.

To avoid overwhelming the player, we made the decision to restrict the player to not more than 2 direct interactions for every actor- a primary interaction and a secondary interaction.

Both the primary and secondary interaction are assigned fixed input keys that remain consistent for every type of interactable actor.

Initial UI Mockup

Final Implementation


Handling Interaction Types

The different types of interactables have their own systems to handle what happens receiving a primary and secondary interaction input. The interaction system is however responsible for displaying the available interactions to the player.

This is done by assigning interaction type gameplay tags to the interactable actors. The gameplay tag assigned determines the primary and secondary interaction prompt displayed to the player.

The system was also built to allow designers to decide for every actor whether the primary and/ or secondary interaction should be used at all, providing more flexibility and control.


What could be improved

While the interaction system overall worked well to handle what the game required, there were a few additional features that could be added to improve the player experience:

1. Switching between multiple interactables in the same area

Problem:

With how dynamic the world is, and with the level of freedom provided to the player, there were instances where more than one interactable entity existed in the same area. This resulted in only one interactable primarily being detected by the system, and there was no convenient way to set another actor as an interactable.

Possible Solution:

A potential solution for this is to subtly mark other interactables within range of the player, along with a way to easily swap between them. An approach similar to how Genshin Impact handles it would work well in our scenario.

2. Ways to highlight harvestable foliage better

Problem:

Due to the established art-direction, harvestable foliage had to blend it with the non-harvestable foliage. While this definitely improved the visual fidelity of the game, there was frustration amongst players with the challenge that came with identifying harvestable foliage, especially when it was covered up by other taller foliage.

The provided foliage indicator VFX also proved insufficient since it only appeared when the player was close to them and thus still required the player to run around to find the foliage.

Possible Solution:

A solution we are considering is to provide players with the ability to temporarily highlight all the harvestable foliage in a certain radius around the player with an input. We envision something like a batman detective vision that temporarily outlines the harvestable foliage and even other interactables with a shader.

This requires a little bit of compromise from the established art-direction, but considering the highlight is temporary and is removed after a duration, it feels like a viable solution that would definitely reduce the frustration players currently experience.


Conclusion

Overall, the interaction system encompasses a lot of how we generally went about designing the various systems in towers.

It started with establishing a clear intended experience for the player in the form of the goals of the system. Then it was an iterative process of prototyping, working with engineers and artists, receiving feedback, and making adjustments over the course of the game’s development till it grew into the system it currently is.

Granted, there are still a few minor issues to flesh out. But I feel the interaction system turned out pretty well, with a solid, flexible, and expandable design that made it one of the core systems that the game is built around.

And while I may have designed SEVERAL systems throughout the development of Towers of Aghasba, this interaction system will be remain special to me, considering it was the very first one I designed for the game. It’s through the process of designing and implementing this system that I started on my collaboration with the rest of the studio, and gradually started earning their trust as a reliable and trustworthy member of the team.

Leave a Reply

Your email address will not be published. Required fields are marked *