Dies ist eine ausführliche und detaillierte Anleitung zum Einrichten oder Debuggen der KI von Einheiten in The Hand of Merlin, geschrieben von Spieldesigner Mat.
Einleitung
In diesem Leitfaden möchte ich Sie durch die Erstellung einer KI führen, die eine feindliche Einheit dazu bringen kann, ihre Fähigkeiten alleine gegen Ihre Kriegerschar einzusetzen.
Wie funktioniert KI in The Hand of Merlin?
Unsere Programmierer haben sich für das Utility-AI-Paradigma entschieden. Einfach ausgedrückt bedeutet dies, dass unsere KI für jede Fähigkeit, die wir in Betracht ziehen, versucht, den „Nützlichkeits“-Wert ihres Wirkens in jeder einzelnen Kachel, die sie wirken kann, zu bewerten und dann alle Optionen zu vergleichen und die eine mit der auszuwählen höchsten Gebrauchswert. Es ist eine großartige Möglichkeit, mehrere Optionen gleichzeitig in Betracht zu ziehen.
Speziell in unserem Fall hat jede „Einheitenklasse“ ihr eigenes „Gehirn“, in dem wir Optionen und die Fragen beschreiben, die die KI zu jeder Zielkachel stellt.
Wenn das noch nicht klar ist, keine Sorge, gehen wir Schritt für Schritt vor.
Einheit Gehirne
Zunächst müssen wir eine erstellen Gehirn. Eine gute Möglichkeit, dies zu tun, ist über die Menü erstellen (STRG+N)und dann auswählen Generisch -> (merlin) KI-Gehirnparameter.
Alternativ können Sie, wenn Sie bereits eine Unit Class-Datei haben, ein neues Gehirn direkt auf dieser Datei erstellen und es dann separat öffnen.
In jedem Fall ist das Ergebnis eine leere Brain-Datei wie diese:
Achten Sie darauf, diesen Welpen zu speichern (wir verwenden den Ordner Content\Merlin\AI\UnitBrains).
Beachten Sie, dass hier nicht viel los ist, da wir noch die Überlegungen zu den Fähigkeiten ausfüllen müssen, aber es gibt bereits etwas namens a Einheitenpriorität. Ich werde diese Gelegenheit nutzen, um zu erklären, was Priorität ist.
Es ist, nun ja, unser „Nutzwert“ für jede Aktion. Da unser Spiel die Seiteninitiative verwendet, werden während einer feindlichen Runde alle möglichen Aktionen aller möglichen Einheiten nach ihrer Priorität geordnet und in dieser Reihenfolge gespielt, solange Fähigkeiten verfügbar sind. Wie wir in Kürze sehen werden, sind die Überlegungen zu den Fähigkeiten hier die Schwergewichte, aber wenn Sie jemals möchten, dass eine Einheit immer zuerst oder zuletzt spielt, sollten Sie vielleicht mit dem spielen Einheitenpriorität, da dies die Priorität/Nützlichkeit von allem multipliziert, was dieses spezifische Gehirn berechnet.
Ein Beispiel dafür, wie das funktioniert, Behemoth hat eine Priorität von 3, und die Warlock (Unterstützungsbandit) hat 0.5. Dadurch spielt normalerweise der Behemoth zuerst und der Hexenmeister erst nach allen anderen Einheiten.
Betrachtungssätze
Schauen wir uns jetzt die an Fähigkeitsüberlegungssätze. Hier sollten Sie mindestens einen für jede Fähigkeit der Einheit haben, aber einige Fähigkeiten (wie Run!) können mehrere Einträge haben.
Stellen Sie sich jeden Betrachtungssatz als eine Frage vor, die Ihre KI stellen kann. Im Beispiel unten: „Wenn ich Schießen verwenden werde, wie sollte ich es verwenden, und ist es wichtiger als andere Fähigkeiten?“
Jede Überlegung hat 4 Eigenschaften:
- A Label ist nur für den internen Gebrauch. Hilft Ihnen, sie aus der Ferne zu identifizieren, und wird sich als nützlich erweisen, wenn wir über das Debuggen sprechen. Es ist wie ein Name für dieses Set.
- Das Fähigkeit Hier listen Sie die Fähigkeit auf, auf die sich dies bezieht. Wenn die Fähigkeit aus irgendeinem Grund nicht aktiviert ist (die Einheit hat sie nicht, sie befindet sich in der Abklingzeit oder sie benötigt mehr AP, als die Einheit derzeit hat), wird dieses Set nicht ausgelöst.
- Sie haben ein Priorität mit der Fähigkeit zu assoziieren, die durch die Einheitspriorität moduliert wird und die …
- Entscheider, das ist die eigentliche Berechnung, die die KI mit dieser Fähigkeit für jede mögliche Kachel durchführt. Beachten Sie, dass es sich tatsächlich um einen eigenständigen Dateityp handelt, also um ein modulares Stück.
Entscheidungsträger und Torschützen
Gefunden in der Inhalt/Merlin/KI/Verhalten Ordner, und immer mit dem Präfix „Behavior_“ benannt, sind dies die Bausteine der KI. Technisch gesehen können Sie diese mischen und anpassen, aber ich empfehle, Ihre eigenen Entscheidungsträger zu erstellen, insbesondere wenn Sie ein bestimmtes Verhaltensmuster im Auge haben.
Jeder Entscheidungsträger ist nichts anderes als eine Kombination aus Torschützen, die die Priorität der Fähigkeit nehmen und sie mit einem Wert multiplizieren. Auf dem Bild oben sieht man das Verhalten_OverwatchDefensive Entscheidungsträger, verbunden mit Mandrake's Schuss vorbereiten Fähigkeit, hat 3 Torschützen:
- Gate_NoOverwatchAlly, das die Priorität auf 0 setzt, wenn ein Verbündeter von Mandrake bereits einen Schuss vorbereitet;
- Gate_CanHitRangedAnyone, wodurch die Priorität auf 0 gesetzt wird, wenn die Einheit kein zu treffendes Ziel finden kann (d. h. sie wird nie die Überwachung verwenden, wenn sich niemand in Reichweite befindet, da sie es wahrscheinlich vorzieht, einfach nach oben zu gehen)
- Score_DefensiveRating, wodurch die Priorität niedriger wird, wenn das aktuelle Feld etwas zu offen liegt, wodurch die Alraune es vorzieht, „Schuss vorbereiten“ nur dann zu verwenden, wenn sie sich in Deckung befindet (wir werden gleich mehr über die Defensivwertung sprechen, keine Sorge).
Beachten Sie, dass sie eine bestimmte Namenskonvention haben. Alle diese Torschützen, gefunden in Inhalt/Merlin/KI/Überlegungen, haben eines von drei Suffixen: Gates kann eine Priorität auf 0 oder 1 setzen, fast wie ein boolescher Wert. Score neigen dazu, subtiler zu sein und reichen von 0 bis 1, und Bonus kann nur 1+ Werte haben, was etwas wahrscheinlicher macht. Dies sind jedoch nur meine persönlichen Konventionen, und Sie können sie frei benennen, wie Sie möchten.
Um etwas tiefer einzutauchen, schauen wir uns an, wie Gate_NoOverwatch-Verbündeter funktioniert:
Zunächst einmal ist es vom Typ „Hat Statuseffekt“, was eine Art Fragekategorie ist. Wir werden alle Fragen und ihre Basiseigenschaften gleich auflisten. Also müssen wir die Frage relativieren. „Wer“ hat „welche“ Statuswirkung. Das „Wer“ hier ist der Einheiten von Interesse. Ich kann es so einrichten, dass es nach allen Arten von Einheiten sucht, z. B. nach Einheiten innerhalb eines Gebiets, nach Einheiten mit einem bestimmten Gesundheitsverhältnis, nach Einheiten mit bestimmten Beziehungen usw.
In diesem Fall suchen wir nach allen Verbündeten, also setzen wir Alle Einheiten in der Einheitsgruppe, und wir wenden den Beziehungsfilter an, mit dem Freund Filter.
Welche Statuswirkung dann? Wir könnten eine Kategorie verwenden (positiv/negativ/Markierung/versteckt), aber in diesem Fall wollte ich nur wissen, wer den Statuseffekt „Overwatch.rsc“ hat. Und los geht's.
So, das Antworten Zu dieser Frage gibt es eine Reihe von Einheiten, die meine Verbündeten sind und auch den aufgeführten Statuseffekt haben. Dies wird als X-Wert im Diagrammeintrag dargestellt.
Um diese Grafik auf visuellere Weise zu sehen, schlage ich vor, hier auf die Schaltfläche „Grafik“ zu klicken
Was Ihnen dieses Bild hier drüben gewährt:
Wie gesagt, die X-Achse ist die „Antwort“ auf die Frage der Überlegung. Die Y-Achse ist jedoch, was auch immer wir entscheiden, sollte multipliziert werden Priorität einen X-Wert gegeben. Wenn im obigen Beispiel das X 0 ist (es gibt keine Verbündeten mit dem Overwatch-Statuseffekt), dann multiplizieren wir die Priorität mit 1. Wenn es jedoch 1 oder mehr Verbündete mit dem Statuseffekt gibt, dann multiplizieren wir die Priorität um 0, wodurch der gesamte Vorgang abgebrochen wird – Mandrake wird nicht nutzen Schuss vorbereiten.
Daher der Name – ist a Tor um zu sehen, ob es Verbündete mit dem gibt Wacht bewirken!
Alle Scorer arbeiten auf die gleiche Weise und geben Ihnen ein X, damit Sie entscheiden können, was das Y sein soll. Hier ist ein kurzer Überblick über alle Typen, damit Sie wissen, wonach Sie suchen müssen. Fragen, die „Ja/Nein“ lauten, ergeben übrigens wie erwartet 1 für Ja, 0 für Nein.
Beachten Sie, dass Offensive Bewertung und Defensive Bewertung bleiben zum Schluss, da sie etwas Besonderes sind.
Tortypen
- Einheiten zählen im Cast-Bereich am Ziel: „Wenn ich eine Fähigkeit auf ein bestimmtes Feld ziele, welche Einheiten findet das Zielgebiet dieser Fähigkeit dort?“ Großartig, um die Wirksamkeit von AoE zu überprüfen.
- Anzahl interessanter Einheiten: „Wie viele Einheiten gibt es von diesem Typ?“ Eine allgemeinere Art, nach Einheiten zu suchen. Vielleicht ist Ihr Verhalten anders, wenn Ihre Einheit die letzte ist, die noch steht?
- Trefferchance: „Wie wahrscheinlich ist es, dass eine Fähigkeit ein bestimmtes Ziel trifft?“. Die meisten Fernkampfeinheiten werden Schüsse auf Ziele in Deckung vermeiden!
- AP-Kosten für die Nutzung dieser Fähigkeit: „Was kostet diese Fähigkeit, wenn ich auf dieses Plättchen ziele?“ Nützlich, wenn Ihre Fähigkeit AP skalieren kann, wie Laufen.
- Min. Laufdistanz von der Zielkachel: „Was ist die Mindestentfernung zu einer interessierenden Einheit ausgehend von der Zielkachel?“ Dies ist nützlich für Bewegungsfähigkeiten, um andere Einheiten in einem angemessenen Abstand zu halten. Nymphensittiche nutzen dies zum Beispiel, um sich Verbündeten zu nähern.
- Min. Gehdistanz zum Zielkachel: „Von hier aus stehe ich, wie weit ist mein Zielplättchen entfernt?“ Dies funktioniert gut, wenn Ihr Gerät die Fahrstrecke minimieren/maximieren möchte. Redcaps lieben es, in Einheiten herumzulaufen, und das ist, was Sie dafür verwenden.
- Luftentfernung: Funktioniert genauso wie Gehdistanz, berücksichtigt aber keine Deckungen und andere Bewegungsblocker. Es ist eine gerade Linie und nutzt Diagonalen gut. Besser für "Nähe"-Checks, wie Mandrake's Vorliebe, Einheiten in der Nähe zu erschießen.
- Einzelziel X Prozent/Betrag: „Wenn es auf diesem Zielfeld eine Einheit gibt, wie viel Rüstung/Gesundheit/Leben hat sie?“ Hier steht Leben für das Hinzufügen von Gesundheit und Rüstung. Dies ist eine gute Wahl, wenn deine Feinde verwundete Ziele bevorzugen oder wenn sie über rüstungszerstörende Fähigkeiten verfügen, bevorzugen sie möglicherweise höher gepanzerte Feinde! Percent stellt es in ein Verhältnis von 0-1 und Amount gibt Ihnen den pauschalen Wert.
- Hat Statuseffekt: „Haben meine Interesseneinheiten einen Statuseffekt?“ Wir haben bereits darüber gesprochen, aber es funktioniert gut für komplexere Verhaltensweisen, wenn Sie versteckte Statuseffekte verwenden!
- Stack-Anzahl der Statuseffekte: „Wie viele Stapel des Statuseffekts haben sie?“ Wir verwenden diesen nicht, aber er würde für einige Effekte vom Typ „Wut“ gut funktionieren, oder?
- Kann der Zaubernde die Fähigkeit aktivieren?: „Kann ich diese andere Fähigkeit benutzen?“ Gut, um zu überprüfen, ob die Abklingzeit Ihrer Fähigkeit abgelaufen ist, bevor Sie etwas tun. Unser Rogue Bandit prüft zum Beispiel, ob seine Shiv-Fähigkeit gelöscht ist, bevor er sich schließt.
- Drehen Sie den Laufrollentyp: „Was ist das für eine Wendung?“ Hoffentlich ist das X hier selbsterklärend. Dies gibt Ihnen ein anderes Ergebnis, wenn dies der Zug ist, in dem die Einheit aufgedeckt wurde, oder wenn es sich um eine Reaktion handelt, wie sie von Redcap's Watchful gewährt wird.
- Blackboard-Abfrage: „Welche Informationen gibt es zum Einsatz von Fähigkeiten?“ Damit können Sie abfragen, welche Fähigkeiten zuletzt verwendet wurden. Wird Ihnen helfen, Combos und ähnliche Aktionen zu sortieren!
- Caster-Aktionspunkte: „Wie viele Aktionspunkte habe ich?“ Wenn Sie lieber einige Aktionen mit einer bestimmten Anzahl von Aktionspunkten ausführen möchten, ist dies das Richtige für Sie!
- Defensive Bewertung: „Wie sicher ist das Zielplättchen?“ Das ist interessant. Die KI versucht abzuschätzen, wie verteidigt ein Feld ist, berücksichtigt alle Feinde und ihre Reichweite. Wenn Sie diese Überlegung mit Ihrer Bewegungsfähigkeit in Verbindung bringen, werden Feinde vorsichtiger und bevorzugen Deckungen, je nachdem, wie Sie Ihr Diagramm einstellen. Und ja – die KI kann sogar sehen, welcher Klasse jeder Feind angehört, und kümmert sich nicht darum, sich gegen Krieger zu schützen!
- Offensive Bewertung: „Wie gut kann ich vom Zielplättchen aus auf meine Gegner schießen?“ Auf diese Weise kann die Einheit eine Rangfolge erstellen, wie viele Feinde sie vom Zielfeld aus treffen kann. Höheres X in Feldern, in denen mehrere Feinde ohne Deckung getroffen werden können – fügen Sie dies hinzu, um ein besseres Flankenverhalten zu erzielen!
Die Kombination der letzten beiden kann Wunder für die „Persönlichkeit“ Ihrer KI bewirken. Arbeite an einem guten Diagramm, um ein Gleichgewicht zwischen „defensivem“ und „offensivem“ Spiel zu finden!
Notiere: wenn dein Bewegungsfähigkeit bestimmt, dass die aktuelle Kachel die bestmögliche Kachel ist, bleibt die Einheit einfach stehen und besteht eine Runde.
Fehlerbeseitigung
Kleine Abschiedsnotiz, um Ihnen beim Testen zu helfen. Wenn Sie sich in Ihren Tests mit neuen Feinden anlegen, gibt es a Konsolenbefehl das kann Ihnen einige Informationen über das Endergebnis Ihrer Abfragen geben.
Um es zu verwenden, während Sie eine Simulation ausführen, drücken Sie die Tilde Schlüssel und Typ
hom_dbg_bEnableAIDebugging = 1
Dadurch wird es so, dass die KI, wenn sie anfängt, ihren ersten Zug in Betracht zu ziehen, tatsächlich alle Aktionen mit einer Endpriorität von > 0 auf dem Bildschirm ausgibt. Wenn Sie fertig sind, setzen Sie dieselbe Variable auf 0.
Damit kann ich sehen, dass er Ooze Run, Gaze, Corrupt und Far Run hätte verwenden können, aber Gaze kommt nicht durch einen Erdrutsch heraus, der auch durch die rot-gelbe Linie gekennzeichnet ist. Klicken Sie einfach mit der rechten Maustaste, um durch den Prozess jeder Aktion zu gehen, und Sie werden sehen, wie Ihre Konfiguration am Ende funktioniert hat!
Los geht's! Gehen Sie hinaus und haben Sie Spaß beim Erstellen neuer Gehirne für Ihre Einheiten!
Das ist alles, was wir heute dafür teilen Die Hand von Merlin führen. Dieses Handbuch wurde ursprünglich erstellt und geschrieben von Mibs. Falls wir dieses Handbuch nicht aktualisieren, finden Sie das neueste Update, indem Sie diesen folgen Link.