Was ist eine überzeugende Berserker feindliche KI-Finite-State-Maschine für ein Roguelike?

7

Ich suche nach einer Möglichkeit, einen überzeugenden Berserker-Feind in einem Roguelike zu erschaffen, den ich seit einiger Zeit erschaffe. Sie können ein Spiel wie NetHack dafür annehmen, wenn Sie überlegen, welche Arten von Aktionen ausgeführt werden können und welche Textnachrichten alarmiert werden können.

Ich frage dies aus zwei Gründen:

  1. Ich habe über ein Jahr lang versucht, dieses Problem zu lösen, und bin gescheitert. Beispiele folgen.
  2. Ich sehe einen allgemeinen Mangel an Beispielen für diese SE, die zeigen, wie eine Abbildung der Zustände einer Entität insgesamt aussieht. Es wäre für die Community hilfreich, ein solches Beispiel zu haben.

Was ich brauche:

Wenn ich Berserker sage, meine ich einen Feind, der in blinde Wut geraten und andere Wesen angreifen kann, mit denen er in Konflikt mit Gewalt und Blutdurst steht. Nicht einfach zufällig zu angreifenden Zielen wechseln, wie es in vielen RPGs der Fall ist. Zu diesem Zweck können Sie beliebige Statuseffekte oder Buffs hinzufügen. Stellen Sie einfach sicher, dass Sie die relevanten Informationen für diese Staaten detailliert angeben.

Ein wahnsinniges Wesen muss seine Wut auf eine Weise ausdrücken, die nicht nur eine Statusänderung mit einigen Kraftsteigerungen ist. Dies ist eine sehr flache Lösung für das Problem. Das Wesen fühlt sich überhaupt nicht wie ein Berserker.

Was ich versucht habe:

Ich habe im letzten Jahr 3 verschiedene Ideen ausprobiert. Und keiner von ihnen befriedigt. Eine Lösung für das Problem könnte ganz neu sein oder eine Lösung für eines dieser Probleme sein. Ich schließe sie hauptsächlich ein, um die Säfte zum Fließen zu bringen.

  1. Das erste, was ich versuchte, war ein einfacher Berserker-Zustand, der die Stärke der Entität erhöhte, ihr Ziel (aus der Liste der Feinde) randomisierte und ihn Obszönitäten schreien ließ, so weiter. In diesem Zustand würde der Feind bis zum Tod darin bleiben.
  2. Das nächste, was ich versuchte, war wirklich eine Modifikation des oben genannten. Der Feind fühlte sich sehr platt und es gab keine Möglichkeit, ihn zu beruhigen oder aus seiner Wut zu werfen, was unrealistisch schien. Ich fügte die Fähigkeit hinzu, sich zu beruhigen (mit einem Zauber und anderen Effekten) und fügte eine Bedingung hinzu, die den Feind in einen normalen Zustand zurückversetzen würde, aus dem er zu anderen übergehen könnte, wie zum Beispiel zur Flucht. Dies schuf mehr Tiefe, ließ aber den Berserker-Staat noch flacher und weniger destruktiv erscheinen.
  3. Von hier aus habe ich alles verschrottet und auf etwas Entstehenderes abgezielt. Im Wesentlichen ein Buff, den der Feind aufgrund eines Übergangszustands auf sich selbst wirken könnte. Einmal gewirkt, würde dies das Verhalten des Feindes (zum Zielen) ändern und seinen Schaden erhöhen, während zufällig Beleidigungen vom Feind ausgegeben werden. Dann könnte er in andere Staaten eintreten und wütend bleiben. So könnte er fliehen, aber immer noch verspotten. Er könnte heilen, aber immer noch wütend sein und viel Schaden verursachen. Dies ist besser, aber das zugrunde liegende Problem bleibt bestehen. Er scheint nicht wirklich wütend zu sein, nur sauer. Hauptsächlich, weil Sie normalerweise nur dem Feind begegnen und nicht mit anderen Feinden, die der Berserker nicht mag, so dass der Randomisierungsaspekt heruntergespielt wird.

Wie sonst kann ich den Kerl wütend erscheinen lassen und nicht nur sauer / mit schlechtem Mund?


Mir ist klar, dass dies eine Grenzlistenfrage ist. Deshalb stelle ich folgende Anforderungen: Es muss eine sehr detaillierte vollständige Antwort sein, die alle Zustände und Bedingungen für den Übergang zeigt. Und es muss mehr als eine Vermutung sein. Sie sollten dies in Ihrem eigenen Roguelike testen, oder es sollte ansonsten offensichtlich sein, warum dies eine wahrscheinlich "beste" Lösung ist, um die Idee des Berserker-Status zu vermitteln.

Ich werde mich auch nicht beleidigen, wenn dies geschlossen ist. Mir wurde klar, dass es die Kante tanzt.

DampeS8N
quelle

Antworten:

7

Berserker-Psychologie

  • Er ist sauer / aggressiv. (Deshalb braucht er einen Grund und ein Ziel , um sauer zu sein.)
  • Wenn er sauer ist, wird er gefährlicher (auch wenn er nicht mehr sauer ist, ist er wieder normal.)

Auslöser - Der Grund, warum er wütend wird

  • Er wird beleidigt
  • Er wird verletzt (oder interessanterweise wird er um eine bestimmte kritische Menge verletzt)

Bewirken

  • Er wird stärker
  • Er wird schneller
  • Er bekommt mehr Gesundheit
  • Er fängt an, Beleidigungen zu schreien
  • Er folgt der Person, die den Schaden verursacht hat

Spielerverteidigung

  • Der Spieler kann den Berserker töten
  • Umweltschäden töten den Berserker (führen ihn in eine Falle)
  • Der Spieler kann den Berserker verlangsamen
  • Andere NPCs / Spieler / Feinde verletzen den Berserker kritisch -> Berserker folgt nun dem neuen Ziel
  • Mit der Zeit beruhigt sich der Berserker (wenn er nicht wieder getroffen wird)

Wie das spielen würde

Der Spieler trifft den Feind. a) Spieler verursacht mehrfach kleinen Schaden (der Feind wehrt sich, wird aber nicht wütend), b) Spieler verursacht großen Schaden, der Feind verliert viel Gesundheit, wird aber wütend. Der Spieler muss jetzt fliehen. Auf der Flucht kann er a) weiteren Schaden verursachen, b) den Berserker verlangsamen. Wenn a) der Feind wütend bleibt oder stirbt. Wenn b) sich der Feind beruhigt (verlangsamt ihn, verursacht keinen kritischen Schaden). Wenn er sich beruhigt hat, können Sie ihn erneut kritisch angreifen. Vielleicht stirbt er jetzt :-)

Hinweis: Wenn Sie meiner Aussage nicht zustimmen, dass der Berserker das Ziel angreift, das ihn verletzt hat, können Sie dies so ändern, dass der Berserker den nächsten Charakter angreift . Das wäre interessant, wenn er aus der Ferne angegriffen würde. (Für einen Schwertkämpfer wäre es dasselbe.)

Fabian
quelle
4
Weitere mögliche Ideen: 1. Lassen Sie den Berserker sein Ziel und jeden zwischen ihm und dem Ziel angreifen . Noch besser, wenn Sie andere Feinde dazu bringen können, dies zu bemerken und aus dem Weg zu räumen. 2. Verpasste Angriffe oder das Töten anderer auf seiner Seite können ebenfalls als Auslöser dienen. Also greifen dich zwei Barbaren an: du tötest einen und der andere wird wütend. 3. Verlieren Sie das Töpfchen. Ein einziger Schrei, wenn der Berserker-Modus ausgelöst wird, ist wahrscheinlich in Ordnung, aber danach würde ich mir vorstellen, dass er sich zu sehr auf Angriffe konzentriert, um sich mit Reden zu beschäftigen. Fügen Sie vielleicht einen einfachen Angriffsschrei hinzu (z. B. "Stirb!"), Wenn er die Nahkampfentfernung erreicht.
Ilmari Karonen
@IlmariKaronen Ich mag diese Notizen. Besonders # 1. Das fühlt sich sehr danach an, als ob jemand in einer großen Gruppe seinen Mist verliert und jeder in Deckung rennt. Das schreit wütend auf mich. Die Antwort selbst hier ist ein sehr guter Anfang, aber ich bin mir nicht sicher, ob es sich für sich genommen als Berserker anfühlt, und ich würde gerne einige Notizen zu den anderen Staaten sehen, in die Sie wechseln würden. Vieles, was eine gute KI lebendig macht, ist, wie Entitäten übergehen und was sie tun. Nur flach von verärgert zu kämpfen wie gewohnt zu gehen, ist ein bisschen nervig.
DampeS8N
Ich denke, am wichtigsten ist, dass Sie eine Animation benötigen, die den Berserker-Zustand des Charakters unterstützt (er bekommt einen roten Kopf, wird größer usw.). Visuelles Feedback ist viel wichtiger als KI-Verhalten, um den emotionalen Zustand eines Charakters zu vermitteln.
Fabian
Die KI-Zustände wären: Ruhe -> GettingAngry (eine Animation && fügt allen nahen Objekten Schaden zu) -> Angriff / Verfolgung -> Erschöpft sein (er ist besonders verletzlich) -> Ruhe
Fabian
@Fabian Das würde von der visuellen Integrität des Roguelike abhängen. In diesem Fall handelt es sich um Textzeichen. Das Beste, was ich tun kann, ist ein rot / blinkendes Zeichen. Deshalb ist dieses Problem schwierig, weil ich nicht mehr als ein Verhalten habe, um den Spieler auf das aufmerksam zu machen, was gerade passiert. Ich kann sie bei der Inspektion als wütend bezeichnen, aber welche Bedeutung hat das? Taten sprechen lauter.
DampeS8N
7

Ich nehme an, die Antwort hängt davon ab, was Sie als "Berserker" betrachten.

Die historischen Berserker waren Schocktruppen, die ihre Aufmerksamkeit darauf richteten, ihre Gegner anzugreifen und zu töten, ohne Rücksicht auf irgendetwas anderes, einschließlich ihrer eigenen Sicherheit oder der anderer auf ihrer Seite. Verschiedene Quellen sind sich nicht einig darüber, wie wahllos sie bei ihrer Tötung waren: Einige beschreiben sie als vorsätzlich jeden und jeden um sie herum tötend, während andere sie lediglich als furchtlose Krieger beschreiben. Hier ist ein ziemlich mitten auf der Straße liegendes Zitat aus der Ynglinga-Saga über Wikipedia:

"Seine (Odins) Männer stürmten ohne Rüstung vorwärts, waren so verrückt wie Hunde oder Wölfe, bissen sich in die Schilde und waren stark wie Bären oder wilde Ochsen und töteten Menschen auf einen Schlag, aber weder Feuer noch Eisen sagten es ihnen genannt Berserkergang . "

Meine Vorstellung von einem Berserker wäre also ungefähr so:

  • Völlig furchtlos , wahrscheinlich ohne Schmerzen. Bereit, Feinde jeder Stufe anzugreifen.
  • Konzentriert sich stark auf das Kämpfen, unter Ausschluss von allem, was um sie herum vor sich geht.
  • Nicht völlig wahllos beim Töten, aber wahrscheinlich bereit, Freundschaftsspiele anzugreifen (vielleicht ohne es zu merken), wenn sie ihm im Weg stehen. Könnte auch Freundschaftsspiele angreifen, wenn keine Feinde in der Nähe sind, sollte aber dennoch feindliche Ziele bevorzugen, wenn es welche gibt.
  • Verachtung subtiler oder vorsichtiger Taktiken: Den Feind angreifen und ihn in Stücke hacken, ist hier der Name des Spiels. Bevorzugt Mêlée-Kämpfe, verwendet jedoch möglicherweise ausreichend starke Fernkampfwaffen (wie Waffen, vorzugsweise vollautomatisch und abgefeuert, während sie auf den Feind zulaufen), sofern verfügbar.
  • Unnatürlich stark und hart - vielleicht nicht auf Superman-Niveau, aber sie sollten auf jeden Fall einige Angriffs- und Verteidigungsboni und vielleicht einen leichten Geschwindigkeitsschub erhalten.

Wie würde ich diese Eigenschaften in das Verhalten der Spiel-KI umsetzen? Nun, hier sind ein paar Ideen:

  • Dies sollte ein Kinderspiel sein, aber ein Berserker sollte niemals weglaufen , selbst wenn er nur einen Trefferpunkt hat und blutet. Schalten Sie einfach diesen Code aus. Das Gleiche gilt für jede andere "defensive" Taktik.

  • Priorisieren Sie taktische Optionen in dieser Reihenfolge: 1. Angriff. 2. Bewegen Sie sich in Richtung Ziel. 3. Alles andere. Insbesondere sollten Berserker nicht aufhören, Gegenstände aufzunehmen, wenn Feinde in Sicht sind, auch wenn die Gegenstände beispielsweise bessere Waffen sind als derzeit. (Der Wechsel von bloßen Händen zu einer bereits gehaltenen Mêlée-Waffe kann jedoch auch vor Angriffen angemessen priorisiert werden.)

  • Wenn sowohl das Angreifen als auch das Jagen nach dem Ziel jemals gleichzeitig eine gültige taktische Option sein können, sollten Sie Ihren Berserkern die Möglichkeit geben, beide gleichzeitig auszuführen (ein Angriff "im Vorbeigehen"), auch wenn Ihre Kreaturen dies normalerweise nicht können das (möglicherweise mit einer Genauigkeitsstrafe zu kompensieren). Auf diese Weise müssen Ihre Berserker ihre Ladung nicht verlangsamen, um Gelegenheitsangriffe zu ergreifen.

  • Zielauswahl: Ich würde vorschlagen, nur den nächsten sichtbaren Feind auszuwählen (unabhängig vom Level) und ihn vom Berserker verfolgen zu lassen, zumindest wenn ein anderer Feind nicht wesentlich näher kommt (z. B. die Hälfte der Entfernung zum aktuellen Ziel). Jagen Sie das Ziel weiter, auch wenn Sie vorübergehend die Sichtlinie verlieren, solange das Ziel nicht zu weit entfernt ist. Dies sollte ein Gefühl der Zielstrebigkeit vermitteln. Sobald sich das Ziel in Mêlée-Reichweite befindet, greife es an.

  • Wegfindung: Wenn es Freundschaftsspiele zwischen dem Berserker und seinem Ziel gibt, sollten Sie ihn einfach angreifen lassen und sich durchhacken. Es liegt an Ihnen, wie eifrig Sie ihn machen werden - zumindest sollte er es tun, wenn es keinen anderen Weg zum Ziel gibt, aber Sie könnten sogar in Betracht ziehen, ihn dazu zu bringen, Freundschaftsspiele bei der Wegfindung völlig zu ignorieren.

  • Das Obige funktioniert wahrscheinlich am besten, wenn Sie auch die (Nicht-Berserker-) Freundschaftsspiele dazu bringen, aus dem Feld zu fliehen, in das der Berserker als nächstes einziehen wird (und vielleicht auch das nächste oder zwei Feld auf seinem Weg). Wenn es zu viel Gedränge gibt, können sie natürlich nicht rechtzeitig fliehen ...

  • Wenn sich keine feindlichen Ziele in der Nähe befinden, sollten Sie den Berserker stattdessen in der Nähe (nebeneinander oder vielleicht ein oder zwei Felder entfernt) angreifen lassen. Natürlich sollten die Freundschaftsspiele versuchen zu fliehen. In jeder Runde, in der der Berserker kein feindliches Ziel hat und keinen Angriff ausführt, muss er sich zufällig bewegen und ihm eine zufällige Chance pro Runde geben, sich zu beruhigen und in den normalen Zustand zurückzukehren.

  • Waffenauswahl: Wie ich oben erwähnt habe, waren echte Berserker im Mêlée-Kampf groß. Verwenden Sie keine Fernkampfwaffen, es sei denn, sie sind in Ihrem Spiel besonders verbreitet und mächtig (z. B. Waffen in einer modernen Umgebung). Wenn Sie Ihre Berserker Fernkampf- oder Flächeneffektwaffen einsetzen lassen, lassen Sie sie feuern, während Sie ihrem Ziel nachjagen (siehe "Passing" -Angriffe oben). Offensichtlich sollte Kollateralschaden ignoriert werden (vom Berserker - es wäre eine sehr nette Geste, andere Feinde dazu zu bringen, sich aus der Linie zwischen Ihnen und einem Berserker mit einer Waffe herauszuhalten).

  • Und natürlich sollte der Berserker über angemessene Angriffs-, Verteidigungs- und Geschwindigkeitsverbesserungen verfügen. Sie sollten wahrscheinlich auch immun gegen Müdigkeit oder Angstzustände sein. Wenn sie geblendet oder verwirrt sind, lassen Sie sie einfach zufällige Angriffe ausführen, in der Hoffnung, etwas zu treffen.

Sie haben festgestellt, dass Berserker ein Zustand sein soll, in den manchmal normale Feinde eintreten können (mit einer Neigung dazu). Daher müssen Sie entscheiden, was es auslösen soll. IRL, traditionell beschriebene Auslöser, sind Kampf, starke Anstrengung und Stress. Einige mögliche Auslöser für ein Spiel könnten sein:

  • Feinde sehen,
  • angreifen,
  • angegriffen werden,
  • schwer verwundet sein,
  • andere im Kampf sehen,
  • zu sehen, wie andere getötet werden, oder
  • Spuren von Kämpfen sehen (Blutflecken, Leichen).

Keiner von diesen sollte IMO wahrscheinlich ein automatischer Auslöser sein; Vielmehr sollte es für jedes dieser Ereignisse eine zufällige Chance geben, den Berserker-Zustand auszulösen, wobei die Chancen möglicherweise aufgrund der individuellen Neigung und der Schwere des Ereignisses variieren. Außerdem können Kombinationen mehrerer Auslöser das Berserkern wahrscheinlicher machen: Beispielsweise kann die Anwesenheit eines sichtbaren Feindes eine Voraussetzung dafür sein, dass eines der anderen Ereignisse Berserker auslöst, während niedrige Trefferpunkte die Wahrscheinlichkeit für die anderen Auslöser erhöhen können.

Sie könnten auch in Betracht ziehen, einen "Wutmesser" anstelle eines einfachen Ein / Aus-Berserker-Zustands einzuführen. Zum Beispiel könnte ein neu ausgelöster Berserker beispielsweise bei Wut = 1 beginnen, wobei Angriff und Angriff die Anzeige erhöhen und keine Feinde sehen, die sie verringern. Bei geringer Wut wäre ein Berserker einfach furchtlos und geschliffen, würde aber im Allgemeinen vermeiden, Freundschaftsspiele anzugreifen, während eine erhöhte Wut die Verstärkung erhöhen würde, aber auch die Angriffe des Berserkers immer weniger diskriminieren würde. Wenn der Wutmesser auf Null sinkt, beruhigt sich der Berserker und kehrt zum Normalzustand zurück.

Was die obszönen Rufe angeht, würde ich sie meistens loswerden: Ich sehe einen Berserker als zu konzentriert auf Angriffe, um sich mit albernen Verspottungen zu beschäftigen. Ich nehme an, Sie könnten ihn etwas schreien lassen, wenn der Berserker-Zustand ausgelöst wird, und vielleicht brüllen oder einen einfachen Kriegsschrei auslösen, wenn Sie sich der Mêlée-Reichweite nähern, aber das scheint mir genug zu sein.


Bearbeiten: Nachdem ich das, was ich oben geschrieben habe, noch einmal gelesen habe, denke ich, dass das Wesentliche an dem, was ich zu sagen versuche, Folgendes ist: Konzentriere dich nicht zu sehr auf die Berserker-KI selbst. Am Ende wird es wahrscheinlich ziemlich einfach, wahrscheinlich viel einfacher als Ihre normale feindliche KI. Konzentrieren Sie sich stattdessen darauf, wie sich die anderen Feinde verhalten, wenn sie einen Berserker in der Nähe sehen - hier entsteht die wirklich interessante Dynamik.

Ilmari Karonen
quelle
1
Bei der Zielauswahl könnte er, sobald er jemanden verfolgt, ein sehr enges Sichtfeld haben, sodass er an anderen Feinden vorbeirast, ohne sie überhaupt zu sehen.
Peter Taylor