German Quip-Based Conversation by Michael Martin translated_by frob begins here. "Eine Erweiterung zu den Reactable Quips zur Realisierung menugeführter Gespräche mit NPC." Include German Reactable Quips by Michael Martin translated_by frob. [Initial german Version based on Version 4 of the english original] Section 1 - Cancelling ASK, TELL, and ORDERS Before asking someone about: clue talking instead. Before telling someone about: clue talking instead. Before answering someone that: clue talking instead. Before asking someone to try doing something: clue talking instead. To clue talking: say "[bracket]Willst [du] mit jemand reden, verwende REDE MIT.[close bracket][paragraph break]". Section 2 - Member fields and default values A person has a quip called a greeting. The greeting of a person is usually quip_null. A person has a table-name called the litany. The litany of a person is usually the Table of No Conversation. [This is the currently active litany.] The qbc_litany is a table-name that varies. The qbc_litany is the Table of No Conversation. Table of No Conversation prompt response enabled a text a quip a number [ QBC is never active if RQ is. ] To decide whether QBC is active: if the number of filled rows in the qbc_litany is not zero and not RQ is active, yes; no. Section 3 - Initiating conversations Talking to is an action applying to one visible thing. Understand "red mit [something]" as talking to. Understand "sprich mit [something]" as talking to. Understand "sprech mit [something]" as talking to. Check talking to: if the noun provides the property litany and the noun provides the property greeting, do nothing; otherwise say "Im Allgemeinen redet man nur mit lebendigen Wesen." instead. Check talking to: if the greeting of the noun is quip_null and the number of filled rows in the litany of the noun is zero, say "Dir fällt nichts ein, was [du] sagen könntest." instead. Carry out talking to: if the greeting of the noun is not quip_null, deliver the greeting of the noun quip; if the number of filled rows in the litany of the noun is not zero: change the qbc_litany to the litany of the noun; display the QBC options. [This is for when we have a Reactable Quips-style followup in the middle of a conversation.] After responding with (this is the revert to normal conversation rule): display the QBC options. To display the QBC options: if the game is over, stop; if RQ is active, stop; let qbc_index be 0; repeat through qbc_litany: if the enabled entry is 1: increase qbc_index by 1; say "[bracket][qbc_index][close bracket] [prompt entry][line break]"; if qbc_index is not 0, change the number understood to 0; otherwise terminate the conversation. Does the player mean talking to a person: it is likely. Section 4 - Delivering lines QBC responding with is an action applying to one number. Understand "[number]" or "sag [number]" as QBC responding with when QBC is active. Carry out QBC responding with (this is the perform talking rule): let qbc_index be 0; repeat through the qbc_litany: if the enabled entry is 1: increase qbc_index by 1; if qbc_index is the number understood: change the enabled entry to 0; deliver the response entry quip; display the QBC options; rule succeeds; say "[bracket]Du hast Auswahlmöglichkeiten von 1-[qbc_index]. Tippe AUSWAHL, um nochmal alle anzuzeigen.[close bracket][paragraph break]". Section 5 - Recaps QBC recap is an action out of world applying to nothing. Understand "auswahl" or "wie bitte" as QBC recap when QBC is active. Carry out QBC recap (this is the perform QBC recap rule): let qbc_index be 0; repeat through qbc_litany: if the enabled entry is 1: increase qbc_index by 1; if qbc_index is 1, say "Du hast folgende Auswahlmöglichkeiten:[paragraph break]"; say "[bracket][qbc_index][close bracket] [prompt entry][line break]"; [This "can't happen" but there's no reason to not check.] if qbc_index is 0, say "[bracket]Du sprichst gerade mit niemandem.[close bracket][paragraph break]"; Section 6 - Utility functions To enable the (q - a quip) quip for (o - a thing): repeat through the litany of o: if the response entry is q, change the enabled entry to 1. To disable the (q - a quip) quip for (o - a thing): repeat through the litany of o: if the response entry is q, change the enabled entry to 0. To enable the (q - a quip) quip: repeat through the qbc_litany: if the response entry is q, change the enabled entry to 1. To disable the (q - a quip) quip: repeat through the qbc_litany: if the response entry is q, change the enabled entry to 0. To shift the conversation to (t - a table-name): change the qbc_litany to t. To run a conversation on (t - a table-name): shift the conversation to t; display the QBC options. To terminate the conversation: change the qbc_litany to the Table of No Conversation. Section 7 - Straightening out the parser Before printing a parser error when QBC is active and the parser error is didn't understand that number: rq_fixerror. German Quip-Based Conversation ends here. ---- DOCUMENTATION ---- German Quip-Based Conversation baut auf den German Reactable Quips auf, um ein tabellengesteuertes System für Gespräche mit NPC's (im Stil von Photopia oder LucasArts) bereitzustellen. Die Spielerfigur beginnt das Gespräch mit der Eingabe >REDE MIT NPC. Nach einem optionalen Austausch von Begrüßungsformeln wählt der Spieler Dialogzeilen aus einem Menü aus. Je nach dem Ergebnis können einzelne Menüpunkte aktiviert oder deaktiviert werden. Der grundlegende Mechanismus der German Reactable Quips bleibt erhalten; NPC's können auch Dinge sagen oder tun, die eine Reaktion der Spielfigur erfordern -- der Spieler muss dann eine Reaktionsmöglichkeit aus einem neuen Menü auswählen. Nach dieser Auswahl kann es dann mit den traditionellen Konversationsmanus weitergehen. Das grundlegende Konzept in dieser Erweiterung ist das "quip". Quips sind keine Objekte, sondern (Text-)Werte, die als Indices in einer Quip-Tabelle dienen. Wer diese Extension verwenden will, muss immer die "Table of Quip Texts" nach seinen Bedürfnissen ausgefüllt bereitstellen. Nur der Tabellenkopf ist bereits definiert, so dass eine Fortsetzung geschrieben werden muss, etwa so: Table of Quip Texts (continued) quip quiptext greeting "'Grüezi miteinand!'" standoff "'Kümmere [dich] um [deinen] eigenen Kram, ja?'" discuss weather "'Sieht nach Regen aus, oder ich will Helmut Kohl hei[ß]en.'" silence "Du beschlie[ß]t, jetzt einfach einmal nichts zu sagen." Personen haben ein "greeting", d.h. ein quip, das beim REDE MIT automatisch zuerst abgerufen wird. Die Voreinstellung dafür ist der interne Wert "quip_null"; d.h. es gibt keine Begrüßungsformel und es geht geradewegs hinein in das Gespräch. Personen haben auch eine "litany", d.h. eine Tabelle mit ihren augenblicklichen Möglichkeiten, das Gespräch fortzusetzen. Voreinstellung hier ist die "Table of No Conversation" in der gar keine Optionen enthalten sind. Andere Litaneien, pardon, "litany"-Tabellen haben drei Spalten: "prompt" - ein String mit der auswählbaren Dialogzeile des Spielers; "response" - ein quip als Verweis auf die Antwort des NPC; und "enabled", eine Zahl, die den Wert 1 haben muss, wenn die Option bei Beginn des Gesprächs aktiv sein soll, sonst 0 (inaktiv): George is a man in the Cherry Orchard. The greeting of George is greeting. The litany of George is the Table of George Conversation. Table of George Conversation prompt response enabled "Wie wird das Wetter?" discuss weather 1 "Was machen [deine] Zähne?" standoff 1 "Sag nichts." silence 1 Regeln können mit quips arbeiten; dazu verwenden wir Rulebooks über die Aktivität "quipping" und die Variable "the current quip". Näheres steht in der Dokumentation zu German Reactable Quips. Eine ganze Anzahl von Phrasen kann in solchen Regeln verwendet werden, am wichtigsten sind "enable the X quip" und "disable the X quip", wobei X für den Namen eines quip der aktuellen "litany" steht, dessen Verfügbarkeit geändert werden soll. Um quips in anderen litanies zu ändern, verwendet man "enable/disable the X quip for Y", dabei steht Y für den Namen der Person, deren litany geändert werden soll. Um das gesamte Repertoire für einen NPC zu ändern oder zu löschen, kann man normale Befehle verwenden wie "change the litany of X to Y". Das hat aber keine Auswirkungen auf ein gerade laufendes Gespräch, hier muss der Befehl "shift the conversation to X" verwendet werden. Man kann auch ein Gespräch ohne Gesprächspartner beginnen: "run a conversation on X" (eine Begrüßungsformel wird dabei nicht ausgegeben). Zuletzt kann man am Ende des Gesprächs die Phrase "terminate the conversation" einsetzen; eine angemessene Antwort auf quips, die "Auf Wiedersehen" oder gar nichts sagen. Benutzte Quips werden automatisch inaktiv. Soll das nicht passieren (etwa für "sage nichts"), müssen sie händisch wieder aktiviert werden: After quipping when the current quip is silence: enable the silence quip. Wenn "silence" in den litany-Tabellen mehrerer NPC's steht, wird diese Regel bei allen greifen. Für individuell angepasste "Auf-Wiedersehen"-quips benötigt man individuelle Regeln. Quips einer litany-Tabelle können bestimmte Nachfolger auslösen, so wie es in der Dokumentation für German Reactable Quips beschrieben ist. Beachte: Solche Reaktionen erfordern eine Antwort des Spielers, normale Gesprächs-Quips nicht. Das ist eine Abkehr von dem bei Phototalk verwendeten Modell, folgt aber moderneren Werken wie City of Secrets oder Beyond. Wenn das Gespräch andauern soll, bis es ausdrücklich beendet wird, muss folgender Code eingebunden werden: Before doing something when QBC is active (this is the QBC force conversation rule): unless the current action is QBC responding with or the current action is QBC recap, say "[bracket]Du musst etwas tun, damit es weitergeht. Gib eine Zahl ein oder tippe AUSWAHL um die Auswahlmöglichkeiten nochmal anzuzeigen.[close bracket][paragraph break]" instead. The QBC force conversation rule is listed first in the before rules. Dieser Code kann sich in künftigen Versionen der Quip-Based Conversations ändern, wenn du also mitten in einem Projekt eine neue Version einspielst, lese diesen Abschnitt noch einmal! Sorge auch dafür, dass du eine Option hast, die sich sowohl selbst immer wieder aktiviert als auch das Gespräch beendet, sonst steckt der Spieler fest. Wenn du diesen Code nicht verwendest und der Spieler jederzeit das Gespräch abbrechen kann, musst du sicherstellen, dass das Gespräch endet, wenn sich Spielerfigur und NPC nicht mehr im selben Raum aufhalten. Wenn die NPC's nicht den Raum wechseln, genügt ein einfaches Before going: terminate the conversation. Wenn du überprüfen willst, ob ein Gespräch im Gang ist, lautet die Bedingung: if QBC is active Example: *** Joe Schmoe Revisited - Eine Neuimplementation von David Glassers Beispiel PHTALKOO.H, mit Zusätzen, als da sind Reactable Quips und Gespräche ohne Partner. *:"Joe Schmoe Revisited" The story headline is "Eine interaktive Reminiszenz des phtalkoo.h-Tests". Include German Quip-Based Conversation by Michael Martin translated_by frob. Use no scoring. Chapter 1 - The Setup When play begins, say "Joe Schmoe is fei dei Freind!" Joe Schmoe's Place is a room. "Du bist bei Joe Schmoe zuhause." Joe Schmoe is a man in Joe Schmoe's Place. The description is "Des is fei dei Freind Joe!" The litany of Joe Schmoe is the Table of Joe Comments. The greeting of yourself is selftalk. Casting Xyzzy is an action applying to nothing. Understand "xyzzy" as casting xyzzy. Carry out casting xyzzy: deliver the xyzzy quip; run a conversation on the Table of Magic Followups. Chapter 2 - The Script Section 1 - The Text Table of Quip Texts (continued) quip quiptext selftalk "Selbstgespräche machen keinen Spa[ß]." who-am-i "'Ich hei[ß]e Joe Schmoe und Inform ha[ss]t mich.'" why-hate "'Ich habe versucht, ein Spiel zu kompilieren und ich bekam 40 Fehler angezeigt.'" yay-inform "'Super ey! Du bist der Grö[ß]te!'" hate-you "'Ich ha[ss]e dich!'[paragraph break] Joe erschlägt [dich]." hate-you-2 "'Ich ha[ss]e dich!'[paragraph break] Joe erschlägt [dich]." hate-you-3 "'Ich ha[ss]e dich!'[paragraph break] Joe erschlägt [dich]." hate-pedants "'Ich ha[ss]e Korinthenkacker!'[paragraph break] Joe erschlägt [dich]." yay-monkeys "'Natürlich mag ich Affen.'" yay-you "'La[ss] uns Freunde sein!'" say-nothing "Du schweigst, auch wenns [dir] mi[ss]behagt." ehn-apes "'Gorillas sind auch OK, glaube ich.'" ehn-lemurs "'Zu Lemuren kann ich nichts Rechtes sagen, ich wei[ß] nichts über sie.'" xyzzy "Wie hei[ß]t die andere Zauberformel?" Table of Joe Comments prompt response enabled "Wer bist [du]?" who-am-i 1 "Warum ha[sst] [dich] Inform?" why-hate 0 "Du hast wahrscheinlich nur einen Strichpunkt vergessen." yay-inform 0 "Mir egal." hate-you 0 "Ha, ha. Inform ha[ss]t [dich], zum Kugeln." hate-you-2 0 "Magst [du] einen Affen?" yay-monkeys 1 "Nur Verrückte mögen Affen." hate-you-3 0 "Nein, ich habe 'einen Affen' gesagt, nicht 'Affen'." hate-pedants 0 "Ich mag auch Affen." yay-you 0 "Sage nichts" say-nothing 1 Table of Quip Followups (continued) quip option result yay-monkeys "Was ist mit Gorillas?" ehn-apes yay-monkeys "Was ist mit Lemuren?" ehn-lemurs Table of Magic Followups prompt response enabled "PLUGH" yay-you 1 "Es gibt wenigstens zwei, welche meinst [du]?" hate-pedants 1 Section 2 - Dialogue affects itself After quipping when the current quip is who-am-i: enable the why-hate quip; enable the hate-you quip. After quipping when the current quip is why-hate: disable the hate-you quip; enable the hate-you-2 quip; enable the yay-inform quip. After quipping when the current quip is yay-monkeys: enable the hate-you-3 quip; enable the hate-pedants quip; enable the yay-you quip. After quipping when the current quip is say-nothing: enable the say-nothing quip; terminate the conversation. Section 3 - Dialogue affects the game After quipping when the current quip is hate-you: end the game in death. After quipping when the current quip is hate-you-2: end the game in death. After quipping when the current quip is hate-you-3: end the game in death. After quipping when the current quip is hate-pedants: end the game in death. After quipping when the current quip is yay-inform: end the game in victory. After quipping when the current quip is yay-you: end the game in victory. Section 4 - Tests test me with "rede mit mir / x joe / rede mit joe / 1 / x mich / 1 / wie bitte / 3 / x mich / 1 / 1". test xyzzy with "xyzzy / 1".