Hello, everyone, and welcome to another update on openage. For this month, our priorities have mostly been getting release 0.6.0 ready to ship and thinking about something to start on for the subsequent 0.7 milestone. While release 0.6.0 is currently stuck in review for a bit, milestone 0.7 is already starting to take shape, so we can already tell you a few details about it. So, without further ado, let's get started.
Game entity interaction
As our major focus for milestone 0.7, we have decided on
interaction between game entities. This includes all ingame mechanics that let units do things to each other. The most common example of this would probably be
attacking, although conversion, construction, or resource gathering also fall under this definition.
openage (mostly) encapsulates all interactions inside one ability type:
ApplyEffect. As the name suggests,
ApplyEffect holds a batch of
Effect objects that define what interactions are done when the ability is used. The concrete type of the
Effect object determines the type of interaction. For example, attack damage is modeled by the
Effect type with the (somewhat bulky) name
FlatAttributeChange. Different effect types can be mixed in a batch, so an
ApplyEffect ability could theoretically do damage and simultaneously try converting a unit.
Structure of ability and effect types in the API.
Our implementation is still in a very basic work-in-progress stage, so there are not many interesting stories to tell yet. We are currently focusing on getting attack interactions to work with the game entities in the AoE2 mod pack with some example code. Here you can see part of the result:
A knight game entity, currently attacking itself due to the absence of other targets.
Implementing more interaction will get more and more complex as other systems get involved, such as attack stances, line of sight, state changes, and so on. You can expect to read more on that over the next months.
What's next?
When we are satisfied with the basic interactions, we will gradually expand the capabilities of the engine to support more interaction features. An obvious choice for the next improvement would be the introduction of a collision system, which we need so that game entities can compute when they are close enough to each other for interactions.