Generieren grammatikalisch korrekter Angriffsbeschreibungen im MUD-Stil

13

Ich arbeite derzeit an einem textbasierten Spiel, bei dem das Ergebnis einer Kampfrunde ungefähr so ​​aussieht

%attacker% inflicts a serious wound (12 points damage) on %defender%

Im Moment tausche ich einfach% attacker% mit dem Namen des Angreifers und% defender% mit dem Namen des Verteidigers. Die Beschreibung funktioniert jedoch, aber nicht richtig gelesen. Da es sich bei dem Spiel nur um Text handelt, möchte ich nicht auf allgemeine Beschreibungen zurückgreifen (z. B. "Du verwendest Attack on Goblin für 5 Schadenspunkte", mit denen das Problem möglicherweise gelöst wird).

Wie erstelle ich korrekte Beschreibungen für Fälle, auf die sich% attacker% bezieht?

  • "Du", der Spieler? "Du fügst zu ..." ist falsch
  • "Bienen" oder anderer Plural? Ich muss irgendwie wissen, dass ich dem Namen ein "The" voranstellen soll
  • Wenn% attacker% ein generisches Substantiv wie "Goblin" ist, wird es seltsam sein, im Gegensatz zu% attacker%, das ein Name ist. Vergleiche "Goblin zufügt ..." mit "Aldraic Swordbringer zufügt ...."

Wie lösen textbasierte Spiele solche Probleme normalerweise?

Extrakun
quelle

Antworten:

15

Der% attacker% -Ansatz kann erweitert werden, um einige andere Informationen als nur die Namen der Objekte einzuschließen:

  1. Das Verb kann Singular oder Plural sein. Das hängt vom Thema ab. "Sie attackieren X" (Singular 2. Person Thema) vs. "Extrakun Angriffe X" (Einzahl 3. Person Thema) vs. "Die Goblins greifen X" (Plural 3. Person Thema). Die meisten Verben brauchen nur eine-s hinzugefügt werden, es gibt jedoch einige Ausnahmen.
  2. Das Substantiv kann ein Eigenname (" Goblin attackiert X") oder ein gebräuchliches Substantiv (" A Goblin attackiert X") sein. Gängige Substantive, die mit einem Vokalton beginnen, sollten "ein" anstelle von "ein" verwenden. Es kann ein gewöhnliches Substantiv sein, hat aber nur eine Instanz im aktuellen Kontext (" Der Kobold greift X an").
  3. Das Substantiv kann in der Anzahl variieren, von Null ("Du hast keine Goblins getroffen ") über Eins ("Du hast einen Goblin getroffen ") bis zu Vielen ("Du hast drei Goblins getroffen "). Viele Substantive brauchen nur ein -soder -eshinzugefügt, aber es gibt viele Ausnahmen.
  4. Subjekte und Objekte können einfach (" Ein Kobold ") oder zusammengesetzt (" Ein Kobold und ihr Bruder ") sein.
  5. Gängige Substantive am Satzanfang müssen in Großbuchstaben geschrieben werden. Wenn das Substantiv einen Artikel enthält oder zusammengesetzt ist, möchten Sie nur das erste Wort in Großbuchstaben schreiben. Die richtigen Substantive werden immer in Großbuchstaben geschrieben.
  6. Die Subjektposition (“ Sie traf den Kobold‚) und Objektposition (‘Der Kobold schlug sie “) verwendet unterschiedliche Pronomen.
  7. Possessivpronomen kann durch Zugabe erzeugt werden , 'swenn Singular ( „A Kobold Axt“), 'wenn Plural ( „Two Goblins Achsen‚), aber Pronomen haben ihre eigenen Regeln (‘ Deine Axt“).

Für Englisch habe ich Python eine Texterzeugungsbibliothek geschrieben, die von einem MUD namens JaysHouseMOO abgeleitet ist. Fühlen Sie sich frei, den Code zu studieren oder zu kopieren . Es gibt keine gute Bibliothek für Ausnahmefälle. Sie müssen das mit den Wörtern hinzufügen, die in Ihrem Spiel benutzt werden. Ich fürchte, mein portierter Code wird nicht ausgiebig getestet. Möglicherweise müssen auch weitere Hüllen für Spiele hinzugefügt werden (es wurde für ein soziales MUD und nicht für ein Gaming-MUD entwickelt).

Ihr Beispiel wäre geschrieben als "%1I %1:(inflicts) a serious wound (%2n damage) on %3i". Die Zahlen %1, %2, %3sagen , dass es die Aufgabe ist , substituiert sein können; I/ isage ihm, dass er bei Bedarf einen indirekten Artikel ("a", "an") hinzufügen soll; nweist es an, das Substantiv ohne Artikel anzuzeigen; :(inflicts)Weist es an, das Verb für dieses Objekt zu konjugieren.

Hier ist die Ausgabe, die dem Angreifer, dem Verteidiger und allen anderen angezeigt werden soll:

$ python
>>> import msg
>>> m = "%1I %1:(inflicts) a serious wound (%2n damage) on %3i."
>>> attacker = msg.GenderedObject('Amit', 'm', 'proper')
>>> defender = msg.GenderedObject('goblin', 'm', 'unique')
>>> points = (12, 'point')
>>> msg.Msg().sub_parties({1: attacker, 2: points, 3: defender}, 
                          m, [attacker, defender])
(['You inflict a serious wound (12 points damage) on the goblin.', 
  'Amit inflicts a serious wound (12 points damage) on you.'], 
 'Amit inflicts a serious wound (12 points damage) on the goblin.')

Beachten Sie, wenn Sie es gegeben (1, 'point')hätten, hätte es "1 Punkt" anstelle von "1 Punkte" gedruckt. Das ist etwas, das mich im Spieltext stört, also habe ich darauf geachtet, eine Funktion zu integrieren, die es einfach macht, das richtig zu drucken.

Hier ist ein weiteres Beispiel mit zusammengesetzten Substantiven und "a" vs. "an":

>>> m = "%1I %1:(hits) %2'n %2'(head)."
>>> a1 = msg.GenderedObject('goblin', 'm', 'normal')
>>> a2 = msg.GenderedObject('orc', 'm', 'normal')
>>> d1 = msg.GenderedObject('Amit', 'm', 'proper')
>>> d2 = msg.GenderedObject('Extrakun', 'm', 'proper')
>>> msg.Msg().sub_parties({1: [a1, a2], 2: [d1, d2]}, m, [d1, d2])
(["A goblin and an orc hit your and Extrakun's heads.", 
  "A goblin and an orc hit Amit's and your heads."], 
 "A goblin and an orc hit Amit's and Extrakun's heads.")

Diese Beispiele sind in englischer Sprache und zeigen nur männliche / weibliche, Pronomen, singuläre / pluralische Verben / Substantive und Eigennamen / gebräuchliche Substantive. Was Sie nachverfolgen müssen, hängt von den Sprachen und der Art des Textes in Ihrem Spiel ab. Auf Spanisch gibt es formelle und informelle Pronomen. Mehrere Sprachen haben männliche und weibliche Formen von Verben. Japanische Pronomen hängen vom Status des Subjekts relativ zum Objekt ab. In einigen Sprachen kann die Verbkonjugation implizit das Thema enthalten. Bestimmen Sie alle Arten von Text, die Sie generieren möchten, und die Sprachen, in die Sie übersetzen möchten. Sie erfahren dann, was Sie in Ihren Spielobjekten nachverfolgen müssen. Beim Erstellen des Inhalts können Sie die erforderlichen Anmerkungen und Ausnahmefälle einfügen.

amitp
quelle
1
+1, tolle Zusammenfassung der Themen. Eine Sache, die ich hinzufügen möchte, ist, dass Spieler kleinere Grammatikfehler für generierten Text wie diesen eher verzeihen, solange der Rest der Informationen (Schadensbetrag, Quelle, Ziel, Prozess) korrekt ist - schießen Sie für 95% korrekte Grammatik , weil die letzten 5% lächerlich schwer sind.
6

Anstatt eine einzelne Zeichenfolge zu haben und zu versuchen, sie ordnungsgemäß zu ersetzen, könnten Sie eine ganze Reihe von Zeichenfolgen haben. Beginnen Sie mit den Objekten. Sie wissen, wenn Sie den Mob erstellen, als was Sie ihn bezeichnen sollen. Sie können dem Objekt eine bestimmte, vom Namen getrennte Eigenschaft zuweisen, um es in Angriffszeichenfolgen zu ersetzen. Waffen können mehrere Saiten für Abwechslung haben und können detaillierter ersetzen. Anstelle von "Angreifer" können sie gezielt nach "Angreifer-Pronomen" oder "Angreifer-Eigenname" fragen. Mobs können auch mehrere Versionen dieser Bezeichner haben, wenn Ihre "Bienen" durch mehrere Mobs dargestellt werden und nicht nur durch einen einzigen Mob, der zufällig "Bienen" genannt wird.

Du hättest also eine Menge wie

name = goblin
pronoun = he
plural = goblins
proper = goblin
common = a goblin
specific_common = the goblin
possessive = the goblin's
possessive_pronoun = his

Dann fragt Ihre Angriffszeichenfolge nach bestimmten Gegenständen wie diesem.

% attacker-pronoun% hit% defender-specific_common% für% damage%! % defender-pronoun% hat das wirklich gespürt!

Blecki
quelle
3

Die Art und Weise, wie ich damit umgehe, besteht in einer großen Anzahl von Systemen, bei denen die Nachricht unter anderem als Datenstruktur und nicht als Zeichenfolge modelliert wird. Die Werte für den Angreifer und den Verteidiger sind die tatsächlichen Objekte. Das Verb ("zufügen" in Ihrer Nachricht) ist als solches gekennzeichnet und kennt das Objekt für die Person, die es ausführt, so dass der Nachrichtenrenderer weiß, dass es in der ersten Person für den Schauspieler und in der zweiten Person für alle anderen angezeigt werden muss. Objekte wissen auch, ob ihre Substantive korrekt sind oder nicht (und daher, ob "the" oder "a / an" jemals auf sie angewendet werden sollte), es gibt Datenmodelle, mit denen ich "the" oder "a / an" angeben kann "würde normalerweise erwartet werden, dass sie auf ein nicht eigenständiges Substantiv in dieser Position angewendet wird, und vieles mehr.

Dieser Thread zu Mudconnector ist Ihrer Frage sehr ähnlich, und ich gehe dort ausführlich auf die Details meines Systems ein. Grundsätzlich ist die Art und Weise, wie ich es mache, das, was Sie wollen, wenn Sie von den zugrunde liegenden Fähigkeiten Ihres Messagingsystems völlig frei sein möchten und bereit sind, dafür einen Preis für die Lernkurve zu zahlen. (Ähnlich wie vi gegen nano.)

Chaos
quelle
0

Ich würde Sie zu KISS raten (halten Sie es einfach) und die Vorteile der Textschnittstelle ausnutzen.

Vereinfachen Sie, vereinfachen Sie, vereinfachen Sie so viel Sie können. Entfernen Sie die Komplexität, bevor Sie überhaupt über das Codieren nachdenken. Verwenden Sie statt eines Satzes zwei Sätze, um ein Ereignis zu beschreiben, wie dies bei vielen Spielen der Fall ist. Erinnerst du dich an Baldurs Tor ? Es ist kein Textspiel, aber der Schaden wird mit Text beschrieben;)


Teilen Sie die Informationen zwischen der Quelle des Ereignisses und seiner Folge auf.

Zum Beispiel :

  • Merlin zauberte einen Feuerball.
  • Madmax wird mit 3 Feuerschäden getroffen.
  • Ein Kobold wird mit 2 Feuerschäden getroffen.
  • Ein Kobold wird mit 10 Feuerschäden getroffen.
  • etc...

Ich würde auch raten, immer die dritte Person Singular zu verwenden, wäre es entweder Eigenname oder Substantiv.

Obwohl Englisch eine wichtige internationale Sprache ist, müssen Sie Ihr Spiel möglicherweise in andere Sprachen übersetzen, wenn Sie eine emotionalere Wirkung erzielen und einen größeren Markt berühren möchten.

Beachten Sie in diesem Fall, dass die Satzstruktur in anderen Sprachen möglicherweise anders ist. Laut Wikipedia bilden 45% der verfügbaren Sprachen den Satz in der SOV-Reihenfolge (subject-object-verb), wobei 42% (wie Englisch) den Satz in der SVO-Reihenfolge bilden. wie Englisch.

Douglas
quelle
Baldur's Gate verfügt über eine vollständig grafische Engine, mit der die Ausgabe angezeigt wird. Für eine interaktive Fiktion ist Text jedoch die gesamte Oberfläche und das Feedback. Es sollte für diesen Fall mehr poliert werden, IMHO.
Extrakun