# [0.6.0] - 2025-05-18
All notable changes for version [v0.6.0] are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## Added
### Ability module
- Add `Ranged(Property)` object; defines range of an ability; replaces various range members in `Ability` objects

### Utility module
- Add `AbilityUsable(Condition)` object; checks if an ability can be used by an entity
- Add `NextCommand(Condition)` object; checks if a specific command is next in the command queue; replaces individual objects checking for specific commands
- Add `TargetInRange(Condition)` object; checks if the target of an entity is in range of a specific ability
- Add `Task(Node)` object; execute internal task when visiting node
- Add `Task(Object)` object
- Add `ClearCommandQueue(Task)` object; clears the command queue when visiting task node
- Add `PopCommandQueue(Task)` object; pops the front command in the command queue when visiting task node
- Add `MoveToTarget(Task)` object; move to the current target of the entity when visiting task node
- Add `XORSwitchGate(Node)` object; switch branches based on evaluating single value
- Add `SwitchCondition(Object)` object
- Add `NextCommand(SwitchCondition)` object; switch branches based on the next command in the command queue
- Add `Command(Object)` object; references internal commands of the engine
- Add `ApplyEffect(Command)` object
- Add `Idle(Command)` object
- Add `Move(Command)` object

### Removed
### Ability module
- Remove `RangedContinuousEffect(Ability)` object; functionality superceded by `Ranged(Property)` object
- Remove `RangedDiscreteEffect(Ability)` object; functionality superceded by `Ranged(Property)` object
- Remove `range` member from `DetectCloak(Ability)`; functionality superceded by `Ranged(Property)` object
- Remove `range` member from `Herd(Ability)`; functionality superceded by `Ranged(Property)` object
- Remove `min_range` member from `ShootProjectile(Ability)`; functionality superceded by `Ranged(Property)` object
- Remove `max_range` member from `ShootProjectile(Ability)`; functionality superceded by `Ranged(Property)` object

### Utility module
- Remove `NextCommandIdle(Condition)` object; functionality superceded by `NextCommand(Condition)` object
- Remove `NextCommandMove(Condition)` object; functionality superceded by `NextCommand(Condition)` object

## Reference visualization

* [Gamedata](https://github.com/SFTtech/openage/blob/927f547d4985cba8e172c9492273b34537571c56/doc/nyan/aoe2_nyan_tree.svg)
