IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Setz dich, nimm dir'n Keks...
AntwortenNeues ThemaNeue Umfrage

Setz dich, nimm dir'n Keks...

Geschrieben um 19:01 am 14.06.2005 | Zitat | Editieren | Löschen
Eike
Mitglied
Baby Gumby
Beiträge: 8

Hallo!

Zwei Beobachtungen zum Verb (sich) setzen:

Wenn man setz dich ohne Objekt eingibt, erfährt man "Dir fehlt die erforderliche Geschicklichkeit."

"Die erforderliche Geschicklichkeit" dazu, sich auf den Boden zu setzen?!?

Erstaunlicher fand ich noch das hier:

setz dich auf den xxx. (Es gibt aber kein "xxx".) Da bekommt man als Antwort "Im Augenblick ist "dich" (du selbst) nicht zu sehen."

Ok, der Parser hat "dich" wohl als Objekt genommen, aber wie kommt es zustande, dass ich nicht da bin, wo ich... gerade bin? :o)

setz dich auf den stuhl funktioniert aber, wenn man einen Stuhl definiert hat.

Wie würde man übrigens neue transitive (so heissen doch glaub ich die mit "sich" davor) Verben definieren?

Ciao,

Eike

Geschrieben um 20:05 am 14.06.2005 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Eike:

Wenn man setz dich ohne Objekt eingibt, erfährt man "Dir fehlt die erforderliche Geschicklichkeit." "Die erforderliche Geschicklichkeit" dazu, sich auf den Boden zu setzen?!?

Dies ist der Antworttext #PutOn 4, der aber nicht nur in PutOnSub, sondern auch in DropSub verwendet wird, nämlich wenn noun der Spieler ist. Ich vermute also, dass dein Satz als (##Drop, player) verstanden wird. (Wieso? Dann müsste 'dich' auf das Token [multiheld] passen.)

Eike:

Erstaunlicher fand ich noch das hier: setz dich auf den xxx. (Es gibt aber kein "xxx".) Da bekommt man als Antwort "Im Augenblick ist "dich" (du selbst) nicht zu sehen."

Das konnte ich beim schnellen Überprüfen nicht reproduzieren. Es wäre schön, wenn du uns einmal genau sagtest, mit welcher Lib du arbeitest und was sonst noch so im Raum ist. Im Fall mit 'nimm alles' hat sich das Verhalten auch nur gezeigt, wenn ein anderes Objekt in der Nähe war. Solche Objekte rufen manchmal ein recht eigenartiges Verhalten des Parsers hervor, wenn er Dinge impliziert oder falsch gewichtet. Du könntest auch einmal im Debug-Modus mit "trace 2" das Tracing einschalten und schauen, was passiert.

Eike:

Wie würde man übrigens neue transitive (so heissen doch glaub ich die mit "sich" davor) Verben definieren?

Reflexiv wäre mein Tipp. Transitiv hat etwas damit zu tun, ob ein Verb ein Objekt verlangt oder nicht.

Man würde diese wohl so definieren wie in der Lib:


Verb extend 'dreh'

    * 'dich'/'mich' 'um' -> TurnAround

    * noun 'um' -> Turn;

Dabei muss man aufpassen, wo man diese Erweiterungen einfügt, da Inform immer die erste Zeile, die es findet, hernimmt, ohne nachfolgende Zeilen anzuschauen.

Ich vermute, dass so etwas auch mit dem Lib-Verb 'setz' passiert.

Geschrieben um 20:38 am 14.06.2005 | Zitat | Editieren | Löschen
Eike
Mitglied
Baby Gumby
Beiträge: 8

Hallo!

Zitat:

Das konnte ich beim schnellen Überprüfen nicht reproduzieren. Es wäre schön, wenn du uns einmal genau sagtest, mit welcher Lib du arbeitest

Ehrlich gesagt - ich weiss es nicht. Ich hab das Jump-Start-Kit (3.0) runtergeladen, und die Library selbst zeigt sich nicht sehr auskunftsfreudig in Sachen Versionsnummer. Wo find ich die?

Zitat:

Du könntest auch einmal im Debug-Modus mit "trace 2" das Tracing einschalten und schauen, was passiert.

Das Beispiel ist minimal (keinerlei Objekte):


Include "VerbLib";

[ Initialise;

  location = Kapsel;

];

Object Kapsel "Kapsel",

   with description

          "Die Kapsel. ",

   has light female;

Include "GermanG.h";

Mit Trace 2 bekomm ich folgendes Ergebnis:

setz dich auf den xxx

[ "setz" setz / "dich" dich / "auf" auf / "den" den / "xxx" ? ]

[Parsing for the verb 'setz' (14 lines)]

[line 0 * multiheld -> Drop]

[line 0 token 1 word 2 : multiheld]

[line 0 token 2 word 3 : END]

[line 1 * worn 'ab' -> Disrobe]

[line 1 token 1 word 2 : worn]

[line 2 * multiheld 'ab' / 'hin' / 'weg' -> Drop]

[line 2 token 1 word 2 : multiheld]

[line 2 token 2 word 3 : 'ab']

[line 3 * Routine(20691) multiheld -> Drop]

[line 3 token 1 word 2 : Routine(20691)]

[line 4 * multiheld Routine(20691) -> Drop]

[line 4 token 1 word 2 : multiheld]

[line 4 token 2 word 3 : Routine(20691)]

[line 5 * 'dich' / 'mich' 'auf' / 'in' noun -> Enter]

[line 5 token 1 word 2 : 'dich']

[line 5 token 2 word 3 : 'mich']

[line 5 token 3 word 3 : 'auf']

[line 5 token 4 word 4 : 'in']

[line 5 token 5 word 4 : noun]

[line 6 * 'dich' / 'mich' 'auf' / 'in' noun 'nieder' -> Enter]

[line 6 token 1 word 2 : 'dich']

[line 6 token 2 word 3 : 'mich']

[line 6 token 3 word 3 : 'auf']

[line 6 token 4 word 4 : 'in']

[line 6 token 5 word 4 : noun]

[line 7 * 'dich' / 'mich' Routine(20694) -> Enter]

[line 7 token 1 word 2 : 'dich']

[line 7 token 2 word 3 : 'mich']

[line 7 token 3 word 3 : Routine(20694)]

[line 8 * multiexcept 'in' noun -> Insert]

[Trying look-ahead]

[line 8 token 1 word 2 : multiexcept]

[line 8 token 2 word 3 : 'in']

[line 9 * multiexcept 'in' noun Routine(20685) -> Insert]

[Trying look-ahead]

[line 9 token 1 word 2 : multiexcept]

[line 9 token 2 word 3 : 'in']

[line 10 * multiexcept Routine(20694) -> Insert]

[Trying look-ahead]

[line 10 token 1 word 2 : multiexcept]

[line 10 token 2 word 3 : Routine(20694)]

[line 11 * multiexcept 'auf' noun -> PutOn]

[Trying look-ahead]

[Advanced to "noun" token: error 1]

[line 11 token 1 word 2 : multiexcept]

[line 11 token 2 word 3 : 'auf']

[line 11 token 3 word 4 : noun]

[line 12 * Routine(20694) -> Enter]

[line 12 token 1 word 2 : Routine(20694)]

[line 13 * held 'an' / 'um' -> Wear]

[line 13 token 1 word 2 : held]

[line 13 token 2 word 3 : 'an']

Im Augenblick ist "dich" (du selbst) nicht zu sehen.

Zeile 5 sollte wohl zuschlagen, aber anscheinend wird ein "xxx" nicht als noun erkannt - es gibt ja schliesslich kein "xxx".

Letztlich kommt keine der Zeilen zum Zuge, "dich" wird als Objekt angesehen - und eine entsprechende Fehlermeldung generiert.

Zitat:

Reflexiv wäre mein Tipp. Transitiv hat etwas damit zu tun, ob ein Verb ein Objekt verlangt oder nicht.

Man würde diese wohl so definieren wie in der Lib:

Danke für den Tip!

Ciao,

Eike

PS: Die in der Anleitung angegebene Kontakt-Liste zur deutschen Bibliothek (http://www.if-de.de/liste.html) scheint es nicht mehr zu geben...?

Geschrieben um 08:41 am 15.06.2005 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Eike:

Ehrlich gesagt - ich weiss es nicht. Ich hab das Jump-Start-Kit (3.0) runtergeladen, und die Library selbst zeigt sich nicht sehr auskunftsfreudig in Sachen Versionsnummer. Wo find ich die?

Hmm, stimmt. Die Lib-Release sollte eigentlich im Spielbanner auftauchen. Dort steht aber nur, dass es Lib 6/10 ist. Die momentane Release ist 22, du findest sie im textfire.de-Archiv. Die Lib im Jump Start Kit ist älter. (Gedankennotiz an mich selbst: Mal aktualisieren.)

Das von dir beschriebene Verhalten zeigt sich aber auch mit der neuesten Lib. Die 'dich'-Zeilen in grammarg.h (Zusammensetzung aus "Gram" und "Argh"?) an den Anfang zu stellen bringt leider auch nichts - außer, dass 'setz dich' nun ein Objekt impliziert oder nachfragt. Weil die Zeile ja nicht vollständig erkannt wird, und andere, nachfolgende Zeilen wohl einen "besseren" Fehler erzeugen.

Eike:

Zeile 5 sollte wohl zuschlagen, aber anscheinend wird ein "xxx" nicht als noun erkannt - es gibt ja schliesslich kein "xxx".

Ja, Inform erkennt leider nicht, dass die Struktur des Satzes auf Zeile 5 passt und erwartet dass man

Eike:

Letztlich kommt keine der Zeilen zum Zuge, "dich" wird als Objekt angesehen - und eine entsprechende Fehlermeldung generiert.

Ich vermute, dass sich Inform die Zeile, die am besten passt, merkt, zusammen mit einem Fehlercode, und diesen dann ausgibt. Außerdem wird 'dich' hier über den Personalpronomen-Algorithmus erkannt, daher kommt nämlich die Fehlermeldung "Im Augenblick ist "dich" (du selbst) nicht zu sehen." Wobei "zu sehen" bei [multiheld] vielleicht bedeutet "ein Kind des Spielers".

Was genau passiert, weiß ich leider nicht.

Diese Mailingliste ist nicht speziell für die Inform.de-Lib gedacht, sindern sie ist eine allgemeine Liste zu Textadventures und hat dieselbe Zielgruppe wie dieses Forum. Das Forum wird allerdings weitaus häufiger genutzt. Informationen über die Liste findest du auf dieser Seite.

Geschrieben um 12:06 am 15.06.2005 | Zitat | Editieren | Löschen
Sophie
Mitglied
Bachelor Gumby
Beiträge: 61

Martin:

Die Lib-Release sollte eigentlich im Spielbanner auftauchen.

Das tut sie, wenn man >VERSION tippt. Ansonsten steht sie in German.h, ganz oben, bei Constant LanguageVersion = ...

Martin:

... grammarg.h (Zusammensetzung aus "Gram" und "Argh"?)

Das heißt übrigens Germang.h, aus "Germ" und "Angh". Was auch immer das dann heißen mag. (Germ ist österreichisch für Hefe. Angh gibt's nicht einmal hier.)

Wahrscheinlich sollte man die ganze Grammatik einmal durchtesten. Da taucht sicher noch mehr auf. Außerdem macht die Zeile Du wolltest vermutlich folgendes: "wirfe..." Probleme, abgesehen davon, dass ich die Formulierung nicht mag, aber mir ist bislang nichts Besseres eingefallen, das auch funktionieren würde.

Geschrieben um 17:53 am 15.06.2005 | Zitat | Editieren | Löschen
ChrisW
Mitglied
Dr Gumby
Beiträge: 275

(Ohne was Sinnvolles zum eigentlichen Thema hinzufügen zu können...)

Sophie:

Wahrscheinlich sollte man die ganze Grammatik einmal durchtesten.

Sollte man vielleicht. Bei einer Portierung der Library auf Version 6/11, die ja auch noch aussteht, kommt man eigentlich nicht drumrum. Ist nur eben ein Haufen Arbeit und deshalb findet sich niemand, der das mal eben so macht. :)

Zitat:

Außerdem macht die Zeile Du wolltest vermutlich folgendes: "wirfe..." Probleme, abgesehen davon, dass ich die Formulierung nicht mag, aber mir ist bislang nichts Besseres eingefallen, das auch funktionieren würde.

Mit dieser Änderung sollte da zumindest "wirf" statt "wirfe" stehen... wird laut Max in der nächsten Ausgabe der deutschen Lib drin sein.

Geschrieben um 23:14 am 15.06.2005 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Sophie:

Das heißt übrigens Germang.h, aus "Germ" und "Angh". Was auch immer das dann heißen mag.

Argh! Deshalb also. Ich hatte mich heute morgen vor dem offenbar dringend nötigen Kaffee schon gewundert, warum mir dieser Brüller nicht schon viel früher eingefallen war.

Wie dem auch sei, ich habe den Schuldigen gefunden. Es ist wieder einmal das Token [worn]. Offensichtlich ist etwas falsch mit den Attribut-Tokens, auch auf Englisch. Nur, dass es dort nicht auffällt, weil sie nie verwendet werden. Ein einziges Mal habe ich [worn] gefunden, und dann auch nur nach 'take off', so dass es dort wirklich nur im richtigen Kontext verwendet wird.

Wenn ich vor die 'put down'-Syntax eine ähnliche Zeile mit [worn] setze, kommt dieses:


>put me down

You lack the dexterity.

>put me on flipperwaldt

You can't see "me" (yourself) at the moment.

Oder auch in der Standard-Lib, ohne extra verbogene Grammatik:


>wear gloves

You put on the boxing gloves.

>i

You are carrying:

  some boxing gloves (being worn)

>take off gloves

You take off the boxing gloves.

>take off gloves

You can't see any such thing.

>i

You are carrying:

  some boxing gloves

Wenn das Attribut nicht gesetzt ist, ist das Objekt für den Parser also unsichtbar.

Der Fehler ITGONE_PE wird in CantSee() gesetzt, wenn das letzte erkennte Wort ein Pronomen ist. (Im Beispiel 'setz dich auf lsmf' ist es allerdings das vorletzte. Ich bin mir nicht ganz sicher, wo der Wortmarker wn in Cantsee steht, er wird aber um eins zurückgesetzt.)

Da ITGONE_PE ein relativ hoher Fehlercode ist, hat er Vorrang vor allen anderen, eigentlich besser getroffenen Tokens und wird ausgegeben. Daher bringt es auch nichts, nach einem Attribut-Token denselben Satz noch einmal mit [noun] anzugeben.

Wenn man also die [worn]-Zeile aus der Verb-Definition herausnimmt, klappt alles.

Da die Attribut-Tokens Probleme machen, könnte man hier bei nicht eindeutigen Sätzen eine Hilfsaktion definieren:


Verb 'setz' 'leg'

    * held 'ab' -> DropOrDisrobe;

   

[DropOrDisrobeSub;

    if (noun has worn and noun in player) <<Disrobe noun>>;

    <<Drop noun>>;

];

Oder den Code aktualisieren. Da aber (nach einem ersten flüchtigen Durchscannen von GermanG.h) außer den paar [worn]s keine anderen Attribut-Tokens benutzt werden, ist das Umgehen wohl die einfachere Variante.

Die ungelenken Texte aus der Lib zu verbessern ist einfacher: Dazu musst du nur ein Objekt LibraryMessages definieren.

AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz