Kampf in Warman dreht sich um zwei Systeme: Skills und Modifikatoren. Skills sind Dinge, die man tut. Schwerthieb, Feuerball schießen, Ausweichrolle. Modifikatoren sind Dinge, die einem passieren, ein Schadensbuff, ein Verlangsamungs-Debuff, ein Regenerationseffekt. Sie interagieren stark: Ein Skill kann einen Modifikator anwenden, ein Modifikator kann einen Skill auslösen und beide können die Werte der Einheit in Echtzeit verändern.
Skills als ScriptableObjects
Jeder Skill in Warman ist ein Unity ScriptableObject, ein Daten-Asset, das außerhalb jeder Szene lebt. Das bedeutet, Skills werden einmal definiert und überall referenziert. Die Basis-Klasse Skill trägt Kategorie, Name, Icon, Ausdauerkosten, Cooldown, Aufladungen und ein Cast-Verhalten-Enum, das bestimmt, wie der Skill zielt (Selbst-Cast, Cursorposition, direktional, Flächenziel).
Skill-Varianten erben von der Basis. Skill_FireProjectileGroup erzeugt einen Projektilstoß. Skill_BlinkSlam teleportiert den Caster zum Ziel und verursacht Flächenschaden. Skill_Heal stellt Gesundheit wieder her. Skill_Summon erschafft eine Entität. Jede Vorlage überschreibt die Ausführungslogik, während die gemeinsame Infrastruktur (Cooldowns, Aufladungen, Ausdauer, Zielerfassung) identisch bleibt.
Aufladungen und Cooldowns
Skills haben zwei Timer: einen Skill-Cooldown (wie lange nach dem Casten, bevor man erneut casten kann) und einen Auflade-Cooldown (wie lange es dauert, eine Aufladung wiederherzustellen). Ein Skill mit 3 Aufladungen und 5 Sekunden Auflade-Cooldown kann 3 Mal schnell hintereinander abgefeuert werden, dann füllt sich jede Aufladung unabhängig über 5 Sekunden nach. Wenn das Aufladungsfeld 0 ist, hat der Skill unendliche Aufladungen, er wird nur durch den Skill-Cooldown begrenzt.
Das Cooldown-System respektiert die Werte der Einheit. Primärangriff-Skills (einfache Waffenschwünge) skalieren ihren Cooldown mit dem Angriffsgeschwindigkeits-Wert. Andere Skills skalieren mit einem allgemeinen Cooldown-Multiplikator. Trank-Skills haben ihren eigenen separaten Multiplikator. Das bedeutet, ein schnell angreifender Charakter schwingt schneller, ohne dass sich sein Heil-Cooldown ändert.
Modifikatoren
Ein Modifikator ist ein ScriptableObject mit einer Dauer, einer Menge von Stat-Effekten, Flags und einer Liste von Modulen. Bei der Anwendung auf eine Einheit verfolgt der Modifier-Wrapper die verbleibende Dauer, aktuelle Stacks und die besitzende Einheit. Modifikatoren können stacken (jede Anwendung aktualisiert die Dauer und erhöht den Stack-Zähler bis zu einer Obergrenze) oder ersetzen.
Die Stat-Effekte sind dasselbe ItemEffect-System, das auch Items verwenden. Ein Modifikator könnte +20% Angriffsgeschwindigkeit oder -30% Bewegungsgeschwindigkeit gewähren, über denselben Codepfad wie Item-Boni. Das bedeutet, Modifikatoren und Items komponieren natürlich, ein „50% erhöhter Feuerschaden"-Modifikator stackt additiv mit einem „30% erhöhter Feuerschaden"-Item-Wurf.
Module
Hier werden Modifikatoren mächtig. Jeder Modifikator kann ein Array von Modulen tragen, event-gesteuerte Komponenten, die feuern, wenn etwas mit der Einheit passiert. Die Modultypen umfassen: DamageModule (löst bei Schadenszufügung aus), DamageTakenEventModule (löst bei Schadenserhalt aus), EnemyDiedEventModule (löst aus, wenn die Einheit etwas tötet), UnitCastedSkillModule (löst bei Skill-Cast aus), RollEventModule (löst bei Ausweichrolle aus) und AuraModule (wendet Effekte auf nahestehende Einheiten an).
Jedes Modul hat eine Auslösechance und kann eigene Skill-Aktionen feuern. Projektile erzeugen, weitere Modifikatoren anwenden, heilen oder Cooldowns zurücksetzen.
Matcher
Module feuern nicht bei jedem Event. Sie haben Matcher. Filterbedingungen, die Dinge wie Schadenstyp prüfen, ob der Schaden von einem Projektil kam, welcher Skill ihn verursacht hat und ob das Ziel eine bestimmte Art von Einheit ist. Ein Matcher_EventOrigin kann ein Modul auf Nahkampfangriffe beschränken, oder nur auf Feuer-Projektile. Das ermöglicht sehr spezifische Item-Effekte wie „10% Chance bei Nahkampftreffer, einen Blitz zu erzeugen", ohne dass generische Trigger unverwandte Kampf-Events verschmutzen.
Immunität und Interaktion
Modifikatoren können Immunität gegen andere spezifische Modifikatoren gewähren. Wenn ein Modifikator angewendet wird, prüft das System, ob das Ziel eine aktive Immunität dagegen hat. Wenn ja, wird die Anwendung lautlos blockiert. Modifikatoren können auch eine Liste anderer Modifikatoren angeben, die bei Anwendung entfernt werden, was natürliches Gegenspiel erzeugt: Einen Feuerschild anzuwenden entfernt zum Beispiel den Eingefroren-Debuff.
Flags steuern den Lebenszyklus: RemoveOnAttack, RemoveOnCast, RemoveOnDeath, RemoveOnWeaponChange. Ein Tarnungs-Modifikator könnte RemoveOnAttack gesetzt haben, damit Angreifen die Tarnung bricht. Ein Waffenverzauberungs-Modifikator hat RemoveOnWeaponChange, damit Waffenwechsel den Buff aufhebt.