A Year of Rain: Gameplay Abilities und Behavior Trees im Zusammenspiel

Wie lassen sich in einem Echtzeit-Strategiespiel Einheitenbefehle, Hero-KI und automatisiertes Targeting technisch sauber verbinden? Nick Prühs, Technical Director bei Daedalic Entertainment und Microsoft MVP, beschreibt in einem Praxisbericht auf Making Games, wie das Team für „A Year of Rain“ Gameplay Abilities und Behavior Trees aus der Unreal Engine 4 miteinander kombiniert hat.

A Year of Rain ist ein Multiplayer-RTS mit starkem Fokus auf mächtige Helden. Sowohl menschliche Spieler als auch KI-Spieler können Einheiten und Helden Befehle erteilen. Dafür brauchte das Entwicklerteam eine KI-Architektur, die mehrere Anforderungen gleichzeitig erfüllt: UI-Vorschau für menschliche Spieler, verschiedene Zieltypen wie Einheiten oder Positionen auf der Karte, Zielvalidierung, Zielpriorisierung, Reichweiteprüfung, Warteschlangen für mehrere Befehle sowie sauber gelöste Abbruchbehandlung.

Gameplay Abilities als Grundlage

Unreal Engine 4 liefert mit dem Gameplay Abilities Framework ein bewährtes System für Fähigkeiten, Attribute wie Gesundheit, Schaden und Cooldown, Status-Effekte sowie Animationen und Netzwerk-Replikation. Prühs zeigt das Beispiel der Bless-Ability: Die Fähigkeit löst eine Animation aus, prüft nach einem Notify im Timeline, ob Held und Ziel noch valide sind, wendet dann einen Gameplay Effect auf das Ziel an und triggert abschließend einen Partikeleffekt über Gameplay Cues auf allen Clients. Das Level der Ability überträgt sich dabei direkt auf den angewandten Effekt.

Behavior Trees ergänzen das System für die eigentliche Entscheidungslogik der Einheiten. Die gerichteten Bäume wurden 2005 mit Halo 2 populär und sind seitdem in vielen großen Produktionen das Mittel der Wahl für KI-Agenten. Jeder Baum hat einen Wurzelknoten, dessen innere Knoten die Entscheidungslogik abbilden, während die Blätter konkrete Aktionen ausführen. Für den Datenaustausch zwischen Knoten nutzt das System ein Blackboard, auf dem Werte wie Zielposition oder Gebäudeindex gespeichert werden.

Befehlssystem mit 17 Order-Typen

A Year of Rain implementiert 17 verschiedene Orders, darunter Stop, Move, Attack und Use Ability. Jede Order definiert den auszuführenden Behavior Tree, unterstützte Zieltypen und die Zielpriorisierung bei fehlendem explizitem Spielerinput. Der Attack-Befehl etwa richtet sich nach dem Angriffsreichweiten-Attribut der Einheit und gewichtet Gegner nach Entfernung, wobei Worker-Einheiten und Gebäude einen festen Malus-Faktor bekommen, damit Einheiten keine Mauern angreifen, solange stärkere Bedrohungen in der Nähe sind.

Zur Zielvalidierung verwendet das Team das Gameplay Tags System aus Unreal. Tags sind benutzerdefinierende, hierarchische Bezeichner wie Status.Changing.Immobilized oder Relationship.Friendly. Ein angehaltener Held trägt den Tag Unarmed und kann damit keinen Attack-Befehl ausführen; ein Ziel mit Invulnerable blockiert ebenfalls den Angriff. Statuseffekte wie Stun kombinieren gleich mehrere Tags: Immobilized, Unarmed und Silenced werden gemeinsam angewendet.

Autocasting und KI-Spieler

Bestimmte Abilities lassen sich auch automatisch auslösen, ohne Spielereingabe. Der Autocasting-Mechanismus prüft periodisch, ob ein Statuseffekt das automatische Wirken verhindert, sammelt alle validen Ziele im Erfassungsradius und wählt das Ziel mit dem höchsten Score aus. Die Cleric-Ability Flame of Life etwa heilt befreundete Einheiten und bevorzugt automatisch jene mit niedrigster Gesundheit.

Ein praktischer Nebeneffekt der Architektur: Für KI-Spieler werden alle Abilities einfach als Autocast-Abilities konfiguriert. Das generiert ohne zusätzlichen Code vollständige KI-Gegner, die dieselbe Entscheidungslogik wie menschlich gesteuerte Einheiten nutzen. Zudem können Designer neue Abilities erstellen und iterieren, ohne eine Zeile C++ anzufassen, weil das gesamte Ability-Blueprint in der Unreal Engine visuell bearbeitet werden kann.

Weitere News

Weitere News

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein