Autor |
Nachricht |
< Freies Reden und menügestuerte Kommunikation zugleich nutzen |
|
Verfasst am:
Mi, 24 Nov 2010 - 1:01
|
|
|
Neuling

Anmeldungsdatum: 15.11.2010
Beiträge: 11
|
|
Hey Leute!
Jau, ich habe mir die Reden-erweiterung geholt.
http://www.martin-oehm.de/tag/nuetzl.html
Menügesteuerte Kommunikation schränkt den Spieler meiner Meinung nach zu sehr ein, doch ohne diese Menüsteuerung ist kein gescheiter Dialog möglich. (Oder doch? Das Kapitel im Handbuch fehlt...) Daher schwebt mir eine "Kombination" vor, bei dem das Menü nur als "Reaktion" erscheinen soll.
Beispiel:
Ich habe in meinem Mini-Adventure eine Oma gebaut, die man nach einem Briefkastenschlüssel fragen kann; der Spieler soll allerdings selbst auf die Idee kommen, sie danach zu fragen.
"Frage Oma nach Briefkastenschlüssel."
Darauf soll die Oma verwirrt in ihrer Hosentasche herumsuchen.
Jetzt soll der Spieler durch eine Menüsteuerung verschiedene Reaktionsmöglichkeiten bekommen.
"Mh, kannst du nicht selbst den Briefkasten öffnen?"
"Das dauert aber..."
"Lass dir ruhig Zeit."
Ich habe so etwas versucht, zu programmieren, doch dann kam folgende Fehlermeldung:
***Fehler***
REDEN.ADX, Zeile 124: 'reden' - Doppelte Variable
Dieser Fehler erscheint mir durchaus logisch, denn das Menüsystem ist ja denke ich mal so programmiert worden, dass es auch erscheint, wenn man eingibt "rede mit xy".
Bevor ich mir also lange Gedanken mache und nach möglichen Fehlerursachen den Kopf zerbreche, wollte ich fragen, ob meine Idee überhaupt zu verwirklichen ist. Wenn ich das bestätigt bekomme, werde ich auch meinen Quellcode nachreichen.
Besten Dank!
(P.S: Ist es erwünscht, wenn ich 100.000 Fragethreads aufmache? Meinetwegen kann ich auch einen "TAGträumer hat mal wieder Probleme"-Thread aufmachen...)
EDIT: Kann man eigentlich diese "Drücke 0, um nichts zu sagen"-Funktion ausstellen? Die hätte nämlich in meinem Fall keinen Sinn; irgendwie muss ja der Spieler reagieren. Ich finde in dem Beispiel "Papagei" nichts darüber. |
|
|
|
 |
|
Verfasst am:
Mi, 24 Nov 2010 - 8:38
|
|
|
Experte

Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Ja, das Kapitel fehlt tatsächlich. Lies dir stattdessen mal Kapitel 9 im Tutorium durch, da werden Konversationen mit dem Schema "frage x über y" behandelt.
TAGträumer hat folgendes geschrieben: | ... Daher schwebt mir eine "Kombination" vor, bei dem das Menü nur als "Reaktion" erscheinen soll. |
Klar geht so was. Du musst halt bei jedem Stichwort zunächst 'redeDialog' ausführen und dann die Variable 'redeAuswahl' auslesen, d.h. du musst für jedes Stichwort das machen, was normalerweise in der 'VorAusf' zu 'reden' gemacht wird. (Den Beehl 'reden' brauchst Du aber nicht.')
Ganz leicht ist das aber nicht: Vor 'redeDialog' musst Du nämlich das Feld 'aktiv' an das Stichwort anpassen. Und dann möchtest Du Dir gewiss merken, was zu jedem Sichwort bereits gesagt wurde. Du müsstest also ein paralleles Feld pflegen, aus dem Du die relevanten Flaggen jeweils hinüber- und nach dem Reden wieder zurückkopierst.
Viel Arbeit. Als Spieler wäre ich gewiss nicht begeistert, wenn ich merke, dass ich auf fast kein Stichwort eine Antwort erhalte, aber beim Briefkastenschlüssel durch ein nachgeschaltetes Menü weiter in die Tiefe gehe. Ich würde entweder nur 'frage x nach y' verwenden (wobei die Antwort ja vom Spielstand abhängen kann) oder nur 'rede mit' mit Menüsteuerung.
TAGträumer hat folgendes geschrieben: | Kann man eigentlich diese "Drücke 0, um nichts zu sagen"-Funktion ausstellen? Die hätte nämlich in meinem Fall keinen Sinn; irgendwie muss ja der Spieler reagieren. |
Wieso hat das keinen Sinn? Was ist, wenn der Spieler mit 'frage Oma nach Briefkastenschlüssel' keine Deiner Auswahlmöglichkeiten im Sinn hatte? _________________ Every silver lining has a cloud. |
|
|
|
 |
|
Verfasst am:
Mi, 24 Nov 2010 - 17:39
|
|
|
Neuling

Anmeldungsdatum: 15.11.2010
Beiträge: 11
|
|
Die Oma soll ja auch zu den anderen Stichworten passend antworten, und der Spieler soll ja auch nur weiterkommen, wenn er die Oma nach dem Schlüssel fragt.
Hm, vielleicht mute ich mir da aber echt zu viel zu. Das Problem ist halt, dass ich nicht weiß, wie ich ohne Menüsteuerung Dialoge führen soll. Ich weiß nur, dass man über "irgendetwas" reden kann. Wirklich realistisch ist das nicht. Vielleicht müsste ich mir mal ein Beispielprogramm suchen, bei dem der Spieler etwas komplexer antworten kann. So was fehlt nämlich auch im Tutorum, und beim Beispielprogramm Karn auch. Glaube ich.
Zum letzten Punkt: Im echten Leben kann man bei einer bestimmten Situation auch nicht einfach den Dialog abbrechen, durch die Gegend spazieren und dann später erst zurückkehren und antworten. In dieser Situation wäre es zu verkraften, doch es gibt genügend Beispiele, bei denen es wirklich stören würde.
Die Menüführung soll alle Antworten abdecken, die zu dem gespielten Charaktär passend sind. Mir ist klar, dass die Menüführung die Freiheit des Spielers stark einschränkt, darum will ich sie ja kombinieren.
Öhm... ja ich kann ja mal meinen (stark verkürzten) Code kopieren...
Ich habe lediglich das Papagei-Programm als Vorbild genutzt... erwartet also nicht zu viel...
Code: |
#DAT 'reden.adx'
Aktion Anfang
Ausf
Ausf redeInit
Text 'Du bist Mehmet Abdulla, und du bist Dönerverkäufer.[x][x][x][x]'
geheZu tresen
EndeAusf
Obj Oma
Name 'Oma Erika' f
vor 'Oma'
subst 'Oma' f 'Erika' f
Ort Privat
Var redeBeginn 1
Var redeEnde 3
Attr Person
Besch 'Oma Erika ey.. Kultfigur und Hassfigur zugleich. Dein Dönerladen
ist nur durch sie so populär geworden. Das allerdings nur durch Oma
Erikas veraltete Weltanschauung...'
VorAusf
(fragen erzählen)
Text 'Oma Erika labert: '
Jenach aObj2
(Briefkasten)
Text '"Der müsste dringendst mal wieder geleert werden."'
(Briefkastenschlüssel)
Bed (Briefkastenschlüssel bei Oma)
'"Ich habe dir doch bereits den Schlüssel gegeben,
du Schussel!"'
ObjNach Briefkastenschlüssel beimir
Text '"Den Briefkastenschluessel? Hm." Oma Erika kramt in ihrer Dings... in ihrer Hosentasche herum. Dann guckt sie
verwirrt durch die Gegend. Dann kramt sie wieder in ihrer Tasche herum.'
Ausf redeDialog
jenach redeAuswahl
!Du wirst auch immer vercheckter, was?
(1) Text '"Rede nicht so unflätig. Dann suche ich
halt nicht nach dem Schlüssel..."'
lösche aktiv.1
!Hast du den Schlüssel vielleicht irgendwo anders
!hingelegt?
(2) Text '"Hetz mich nicht so, ich werde den Schlüssel
schon finden...
lösche aktiv.2
!Ja oder dann guck du doch einfach in den Briefkasten..
!ich habe nicht so viel Zeit!
(3) Text '"Stehst du unter Zeitdruck"'
lösche aktiv.3
EndeAusf
(sonst)
Text '"Ach mein Mehmet, du erzählst viel zu viel..."'
Ende
Stop
EndeAusf
Block "r"
1 '"Du wirst auch immer vercheckter, was?"'
2 '"Oder haste den Schlüssel irgendwo anders hingetan?"'
3 '"Kannst du nicht einfach den Briefkasten aufmachen, ich habe besseres
zu tun!"'
Aktion redeInit
Ausf
Daten aktiv 1 (1 1 1) ! Oma
EndeAusf
|
Dankööö |
|
|
|
 |
|
Verfasst am:
Sa, 27 Nov 2010 - 20:26
|
|
|
Neuling

Anmeldungsdatum: 15.11.2010
Beiträge: 11
|
|
Also das Problem ist noch aktuell... die Fehlermeldung bekomme ich immer noch. Ich habe mal versucht, das freie Gespräch herauszunehmen, und mich auf das Menügestuerte zu fokussieren... klappt immer noch nicht. Ich weiß auch nicht was es mit dem Block 'r' auf sich hat.
Code: | #DAT 'normal.adv'
#DAT 'reden.adx'
Aktion Anfang
Ausf redeInit
Text 'Du bist Mehmet Abdulla, und du bist Dönerverkäufer.'
geheZu Privat
EndeAusf
Raum Privat
Name 'Privatbereich'
Besch 'Privatbereich [x] [x]Hier lagert sämtlicher Scheiß, unter
anderem auch Oma Erika.'
Obj Oma
Name 'Oma Erika' f
vor 'Oma'
subst 'Oma' f 'Erika' f
Ort Privat
Var redeBeginn 1
Var redeEnde 3
Attr Person
Besch 'Oma Erika ey.. Kultfigur und Hassfigur zugleich. Dein Dönerladen
ist nur durch sie so populär geworden. Das allerdings nur durch Oma
Erikas veraltete Weltanschauung...'
VorAusf
(reden)
Ausf redeDialog
jenach redeAuswahl
!Du wirst auch immer vercheckter, was?
(1) Text '"Rede nicht so unflätig. Dann suche ich
halt nicht nach dem Schlüssel..."'
lösche aktiv.1
!Hast du den Schlüssel vielleicht irgendwo anders
!hingelegt?
(2) Text '"Hetz mich nicht so, ich werde den Schlüssel
schon finden...
lösche aktiv.2
!Ja oder dann guck du doch einfach in den Briefkasten..
!ich habe nicht so viel Zeit!
(3) Text '"Stehst du unter Zeitdruck"'
lösche aktiv.3
Ende
Stop
EndeAusf
Block "r"
1 '"Du wirst auch immer vercheckter, was?"'
2 '"Oder haste den Schlüssel irgendwo anders hingetan?"'
3 '"Kannst du nicht einfach den Briefkasten aufmachen, ich habe besseres
zu tun!"'
Aktion redeInit
Ausf
Daten aktiv 1 (1 1 1) ! Oma
EndeAusf
Ende
| [/code] |
|
|
|
 |
|
Verfasst am:
So, 28 Nov 2010 - 10:53
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
TAGträumer hat folgendes geschrieben: | Also das Problem ist noch aktuell... die Fehlermeldung bekomme ich immer noch. |
Das liegt daran, dass der Befehl reden doppelt defniert wird: einmal in normal.adv und einmal in reden.adx, jeweil mit unterschiedlicher Syntax. Um den Befehl reden in reden.adx zu benutzen, müsstest du die Doublette in normal.adv auskommentieren:
Code: | /* Bef reden
Name 'reden'
Verb 'rede' 'sprich' 'spreche'
Syntax mit demObj (Person) über dasObj (Allg)
Ausf erzählen */ |
In deinem Beispielcode werden die Themen niemals aktiviert, weil du in dem zweiten Beispiel einen kleinen Fehler in der Aktion Anfang gemacht hast, den du beim ersten Mal nicht gemacht hast. Wenn Du die Aktion folgendermaßen schreibst, sollte es funktionieren:
Code: | Aktion Anfang
Ausf
Ausf redeInit
Text 'Du bist Mehmet Abdulla, und du bist Dönerverkäufer.'
geheZu Privat
EndeAusf |
Was es mit dem Textblock "r" auf sich hat: "r" ist der Name des Blocks. Hier werden Gesprächsthemen (Quips) mit Nummern versehen angegeben. Diese Nummern entsprechen den Antworten, die du beim Objekt angibst. In redeDialog (im Modul reden.adx) werden die Themen aus dem Textblock "r" dann mit dem Befehl
ausgegeben. |
|
|
|
 |
|
Verfasst am:
So, 28 Nov 2010 - 17:47
|
|
|
Neuling

Anmeldungsdatum: 15.11.2010
Beiträge: 11
|
|
Vielen Dank! Ist echt cool, dass einem hier so geholfen wird!
Aber drei Fragen habe ich noch:
1. Wenn ich den "reden"-Befehl in normal.adv lösche, dann kann ich die beiden Verfahren nicht mehr miteinander kombinieren, so wie ich es ursprünglich dachte, oder? Oder kann ich den Befehl in normal.adv auch einfach umbenennen, so dass es keine Komplikationen mehr gibt?
2. Kann man denn verhindern, dass jemand bei einem menügesteuerten Gespräch den Dialog einfach mit 0 verlässt?
Das hätte vielleicht Sinn, wenn man jemanden ansprechen will, dann aber merkt, dass man keines von den genannten Sachen sagen will. Wobei man in dem Fall ja auch einfach eine Nummer anfügen kann, in der "(Doch nichts sagen)" steht.
Aber als Reaktion (wie in meinem Beispiel) finde ich ein abruptes Dialogende (das nachher beliebig fortgesetzt werden kann) lächerlich.
3. Gibt es vielleicht irgendwo ein Beispielprogramm oder ein Tutorum, in dem ausführlich über einen menülosen Dialog berichtet wird, der sich jenseits von "Frage xy nach xy" befindet? |
|
|
|
 |
|
Verfasst am:
So, 28 Nov 2010 - 19:50
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
TAGträumer hat folgendes geschrieben: | Wenn ich den "reden"-Befehl in normal.adv lösche, dann kann ich die beiden Verfahren nicht mehr miteinander kombinieren, so wie ich es ursprünglich dachte, oder? Oder kann ich den Befehl in normal.adv auch einfach umbenennen, so dass es keine Komplikationen mehr gibt? |
Den Befehl kannst du einfach umbenennen, z.B. in reden_mit:
Code: | Bef reden_mit
Name 'mit jemandem reden'
Verb 'rede' 'sprich' 'spreche'
Syntax mit demObj (Person) über dasObj (Allg)
Ausf erzählen |
TAGträumer hat folgendes geschrieben: | Kann man denn verhindern, dass jemand bei einem menügesteuerten Gespräch den Dialog einfach mit 0 verlässt? |
Dazu müsstest du wohl etwas in reden.adx herumschreiben (es gibt in T.A.G., glaube ich, keinen Mechanismus zum Ersetzen von Codeblöcken). Zum Beispiel so:
Code: | Aktion redeDialog
Ausf
lokal i j
lösche j
Schleife i aObj.redeBeginn aObj.redeEnde
Wenn (aktiv.i) und (j < 9) dann
inkr j
sei redeRef.j i
Text ' [(][j][)][+8][Text "r" i][+0][x]'
Ende
Ende
lösche redeAuswahl
Bed (j) 'Dir fällt nichts ein, worüber du mit [dem aObj]
reden könntest.'
Text '[+0][x](Bitte einen Text [(]1-[j][)] wählen)'
Auswahl redeAuswahl '123456789'
Wenn (redeAuswahl > j) lösche redeAuswahl
Wenn (redeAuswahl > 0) sei redeAuswahl redeRef.redeAuswahl
EndeAusf |
Ich habe die Null aus der Auswahl herausgenommen und die Eingabeaufforderung etwas abgeändert. Jetzt werrden am Anfang nur noch die Möglichkeiten 1-3 angeboten. Aber eine vierte Möglichkeit zum Beenden des Dialogs sollte schon sein, denke ich. Wenn dem Spieler z.B. noch etwas einfallt, das er lieber vor dem weiteren Dialog noch erledigen möchte und es dann nicht darf, kann das zu akutem Genervtsein führen. |
|
|
|
 |
|
|
Alle Zeiten sind GMT + 1 Stunde (MEZ) |
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|