IF-Forum

» IF-Forum - Autorencafé - Schreiben! - I7 Dein Du's Kopf...
AntwortenNeues ThemaNeue Umfrage

I7 Dein Du's Kopf...

Geschrieben um 20:25 am 28.11.2011 | Zitat | Editieren | Löschen
Bushin
Mitglied
Bachelor Gumby
Beiträge: 53

Servus,

ich mal wieder ^^ kopfeinzieh

Ähem...:

Zitat:

darkred

Das ergibt folgendes:

Zitat:

darkblue

Tja ähem... griins jemand ne Idee dazu?

Eigentlich hab ich hier zwei Probleme: das gravierendere ist "Dein Du´s Kopf" und "Wyrdians Wyrdian's Gesicht" - ich glaube da klemmt irgendwas in Gerx.

Das zweite ist dann: eigentlich mag ich für jede Person, die rumdackelt die Möglichkeit haben, Körperteile, Kleidung und so weiter anzusprechen. Ich dachter das geht mit "every Person" - aber so das Wahre scheint das nicht zu sein: sobald es mehr als einen Kopf gibt (also immer, wenn ein Npc anwesend ist) fragt das Programm nach (oder wählt nach eigenen Ermessen einen Kopf aus). Geht dann scheinbar doch nur, wenn man jeden NPC inclusive Understandtokens für jeden Part extra hinterlegt? Das ist allerdings ein bißchen arg viel Arbeit ...

sich seinen sein's Kopf kratzend...

Bushin

P.s. hab momentan GerX 3/111111 laufen

Geschrieben um 23:07 am 28.11.2011 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Körperteile sind für GerX das pure Grauen. Wir können in die Erzeugung der Teile nur ganz begrenzt eingreifen, da der Hauptteil in NI gemacht wird.

Siehe dazu die GerX-Kurzdoku Section 4.8.

Da wird auch ein Vorschlag gemacht, wie man einigermaßen sicher das Vokabular definiert. Und nicht vergessen, die Teile privately-named zu machen.

Edit: Aber irgendwie scheint da doch wieder ein Fehler drin zu sein. Und dabei hat doch alles schon so gut funtkioniert. Wie gesagt, Körperteile würde ich vermeiden, wenn es geht.

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

Ich habe mal ein wenig herumgespielt. So richtig intuitiv ist das ja nicht, aber im Großen und Ganzen klappt es:

003399

Nun kann man die Köpfe und Gesichter der Anwesenden konkret ansprechen. Bei meinem Kopf muss ich aber explizit Vokabular angeben. (Weil "mein" in deform kein Descriptor ist und GerX das übernommen hat, denke ich. Im Original-I6 bezieht sich "mein" auf Dinge, die ich in der Hand halte. Ob es auch Dinge, die ein Teil von mir sind, berücksichtigt, weiß ich nicht. Ich finde aber, dass man die besitzanzeigenden Fürwörter eher als "eigentumanzeigende" Fürwörter benutzt. Wenn ein Taschendieb mir den Geldbeutel wegnimmt, ist er immer noch "mein Geldbeutel". Ist also 'n Feature, kein Bug.)

Damit man nicht für jedes Synonym ein Extra-Token mit der #003399 schreiben muss, kann man zunächst alle einfachen Synonyme in einem Sammel-Token zusammenführen und für dieses Sammel-Token dann die verschiedenen Genitiv-Muster definieren.

Die doppelte Ausgabe des Genitivs - einmal auf Deutsch, einmal auf Englisch - kann man unterbinden mit #003399. Wenn man das nicht macht, erzeugt I7 einen fest verdrahteten Namen inklusive Genitiv, dem dann GerX einen weiteren Genitiv voranstellt. Wieso das Gesicht des Abgeordneten aber keinen Zusatz bekommt, weiß ich nicht. Vermutlich, weil er nicht #003399 ist.

Da könnte man jetzt gewiss die #003399 einsetzen, aber wann die funktioniert und was die macht, habe ich nicht herausfinden können. #003399 hat eine Wirkung: Es wird etwas vorangestellt. Ich möchte aber die Regel ersetzen, aber die #003399 selbst wird nicht aufgerufen.

Ah! Doch noch hingekriegt:

003399

Geschrieben um 23:21 am 28.11.2011 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Martin:

Die doppelte Ausgabe des Genitivs - einmal auf Deutsch, einmal auf Englisch - kann man unterbinden mit The printed name of a face is "Gesicht".

Das soll GerX eigentlich schon von alleine machen ... da ist offenbar was kaputt.

Siehe Section - German assembly components workaround.

Die neue Regel heißt "The German printing the name of a body part rule."



when the item is part of a person and the item is proper-named

(this is the German printing the name of a body part rule):

   let C be the current case;

   if the holder of the item is the player:

      if C is:

         -- nominative:

            if the gender of the item is:

               -- Mehrzahl: say "[deine]";

               -- männlich: say "[dein]";

               -- weiblich: say "[deine]";

               -- sächlich: say "[dein]";

         -- genitive:

            if the gender of the item is:

               -- Mehrzahl: say "[deiner]";

               -- männlich: say "[deines]";

               -- weiblich: say "[deiner]";

               -- sächlich: say "[deines]";

         -- dative:

            if the gender of the item is:

               -- Mehrzahl: say "[deiner]";

               -- männlich: say "[deinem]";

               -- weiblich: say "[deiner]";

               -- sächlich: say "[deinem]";

         -- accusative:

            if the gender of the item is:

               -- Mehrzahl: say "[deine]";

               -- männlich: say "[deinen]";

               -- weiblich: say "[deine]";

               -- sächlich: say "[dein]";

      set definite-mode suffixes from the item with C;

      say " [printed name of item]";

   otherwise:

      if the holder of the item is proper-named:

         set bare-mode suffixes from the item with C;

         say "[holder of item]s [printed name of item]";

      otherwise:

         set definite-mode suffixes from the item with C;

         say "[printed name of item] [des holder of item]";

   now the previously named noun is the item;```

Edit: Doch nichts kaputt. Damit der Workaround funktioniert, muss der "printed name" einer Klasse angepasst werden:

blue

Dann klappt der eingebaute Workaround wieder. Ich musste nur mal selbst wieder die Kurzdoku lesen ... und Martin hat's ja auch geschrieben.

[http://ifiction.pageturner.de/inform7/German.html#docsec20](http://ifiction.pageturner.de/inform7/German.html#docsec20)
Geschrieben um 23:41 am 28.11.2011 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

ChristianB:

Damit der Workaround funktioniert, muss der "printed name" einer Klasse angepasst werden:

Ja, genau. Nachdem ich das gemacht hatte, funktionierte es wie es soll. (In der schon sehr umfassenden Kurzdoku habe ich das aber natürlich nicht nachgelesen, obwohl ich die ja im I7-Interface zur Verfügung habe.)

Das ist vielleicht der Vorteil der einsprachigen Quelltext-Variante: Man muss mehr explizit angeben, dafür muss I7 aber auch nicht so viele Annahmen treffen und kann auch nicht so oft danebenliegen.

Edit: Danke, dass Du die Routine gepostet hast. Ich denke, ich weiß jetzt, warum ich für den improper-benamten Abgeordneten einen Workaround angeben musste. Wenn ich den gefetteten Passus in der Regel

003399

weglasse, heißt der Kopf ohne weiteres Dazutun "Kopf des Abgeordeten". So ganz verstehe ich das aber nicht, denn der Körperteil ist ja eigentlich nie proper. (Wenn man mal davon absieht, dass manche ihren Körperteilen Namen geben.) Vielleicht ist dann etwas anders kaputt? Und wieso klappt das dann, wenn der Besitzer des Körperteils proper ist? Das wird ja in der Regel oben gar nicht abgefangen. Hmmm.

Geschrieben um 01:10 am 29.11.2011 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Martin:

So ganz verstehe ich das aber nicht, denn der Körperteil ist ja eigentlich nie proper.

Die implizit erzeugten Körperteile macht NI automatisch "proper-named". Deshalb befragen wir in dem Workaround dieses Attribut, um nur die von NI erzeugten Körperteile zu erwischen und nicht dem Autor irgendwo dazwischenzufunken, zumindest nicht mehr als nötig. Für manuell definierte Körperteile ist es ausreichend, den vom Autor angegebenen printed name zu verwenden (oder nicht? Vielleicht sollten wir das ändern?).

blue

Annes Nase sieht im erzeugten I6-Code dann so aus:



    class K16_nase

    with IK16_Count 1

    with IK16_Link nothing

    with KD_Count 16

    with list_together 0

    has mark_as_thing

    with component_parent I116_anne

    with IK2_Count 3

    with IK2_Link nothing

    with vector 0

    has ~neuter

    has proper

    with action_bitmap 0 0 0 0 0 0

;```

... has proper.

**Mein Testspiel:**
> >showme annes nase

Annes Nase - Nase

Ort: ein Teil von Anne in dem Labor

singular-named, proper-named; unlit, inedible, portable, female

printed name: "Nase"

printed plural name: "Nasen"

indefinite article: none

description: none

initial appearance: none

special indefinite article: pending

Aber warum es einen Unterschied macht, ob die Person proper- oder improper-named ist, hab ich auch noch nicht rausgefunden.

Der andere Abgeordnete in Deinem Beispiel bekommt einen Kopf und ein Gesicht, die nicht proper haben:

```Object I129_backbencher_s_face ""

    class K17_face

    with IK17_Count 3

    with IK17_Link nothing

    with KD_Count 17

    with list_together 0

    has mark_as_thing

    with component_parent I127_backbencher

    with IK2_Count 12

    with IK2_Link nothing

    with vector 0

    with action_bitmap 0 0 0 0 0 0

;```

Da ist NIs Wirken inkonsequent. Vielleicht ist das ein Bug in I7? Oder das erzeugte Körperteil bekommt automatisch die gleiche proper/improper-Eigenschaft wie das Mutterobjekt verpasst. Dann müssten wir den GerX-Workaround entprechend Deines Vorschlags ändern, was ich in der aktuellen Testversion einmal gemacht habe:

[http://ifiction.pageturner.de/inform7/test/German_3-111129--TEST1.zip](http://ifiction.pageturner.de/inform7/test/German_3-111129--TEST1.zip)

In Deinem Beispiel läuft damit alles, wie es soll.
Geschrieben um 08:53 am 29.11.2011 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Vielen Dank für die Untersuchungen. Ich werde mir die neue Testversion heute abend mal genauer ansehen.

Christian:

Oder das erzeugte Körperteil bekommt automatisch die gleiche proper/improper-Eigenschaft wie das Mutterobjekt verpasst.

Das ist es! Wenn die normalen Regeln für Körperteile gelten sollen, muss das ja so sein, denn "Annes Nase" ist ja im Sinne von Inform "proper": Es wird kein Artikel verwendet und im unbestimmten Modus wird dasselbe ausgegeben wie im bestimmten. Bei der "Nase des Eisverkäufers" wird ja der Artikel mit angegeben.

(Obwohl "eine Nase des Eisverkäufers" sich sehr eigenartig anhört. Aber bei Dingen, von denen man mehrere haben kann, klingt es schon plausibel: "ein Golfschläger des Anwalts".)

Geschrieben um 12:29 am 29.11.2011 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Martin:

Obwohl "eine Nase des Eisverkäufers" sich sehr eigenartig anhört.

Notfalls kann man ja immer noch ...

blue

... schreiben, um die Ausgabe mit unbestimmtem Artikel zu verbiegen.

Besten Dank für Dein Beispiel und Deine Hinweise. Wir hoffen ja, dass wir in der nächsten I7-Version mehr Zugang zu diesen automatisierten Prozessen bekommen werden. Denn das Vokabular für die Körperteile vernünftig anzulegen ist weiterhin nicht besonders bequem.

Geschrieben um 14:21 am 29.11.2011 | Zitat | Editieren | Löschen
Bushin
Mitglied
Bachelor Gumby
Beiträge: 53

Zitat:

bosbach

Wolfgang Bosbachs Fresse (wenn ich das einmal in Ihren Worten sagen darf, Herr Minister) ist offenbar ein Teil von Wolfgang Bosbach.

-))))

Ansonsten: danke für die umfassende Aufklärung. Langsam versteh ich da wenigstens etwas. Ich bin da allerdings schwer am Überlegen, ob ich das mit den Körperteilen nicht tatsächlich auf ein absolut notwendiges Maß beschränke im Augenblick, um die Zeit für andere Probleme zu nutzen.

Geschrieben um 19:20 am 29.11.2011 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Mir ist gerade aufgefallen, dass unser Workaround Eigennamen, die auf S enden, nicht berücksichtigt. Folglich wird falsch "Klauss Gesicht" geschrieben.

In einer neuen zweiten Testversion habe ich mal eine zusätzliche Eigenschaft eingeführt, mit der man Klaus als Sonderfall deklarieren kann:

blue

Das ist einfacher, als printed-names und alle möglichen name-printing-rules zu prüfen, ob sie am Ende ein S ausgeben (wenn das überhaupt komplett zu machen ist).

Vielleicht kann man die Eigenschaft noch schöner benennen, aber grundsätzlich ermöglicht sie die Ausgabe der korrekten Genitiv-Form "Klaus' Gesicht".

Grüße,

Christian

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

So, ich habe die neueste Version, die mit #003399, einmal getestet, allerdings nur in der Variante "privately-named". Sie macht das, was sie soll bei Körperteilen in der Ein- und Mehrzahl von properen und nicht so properen Leuten.

Dass der Autor #003399 selbst vergeben kann bzw. muss, finde ich gut. Oft muss er das ja nicht machen, und da ist es gut, wenn er Kontrolle über die Ausgabe hat. Und so bekommen Max und Moritz auch noch ihre Apostrophe.

Ein Nachteil der Methode ist, dass "Max' Nase" nicht verstanden wird. Man könnte zwar Apostrophe am End eines Worts wärende der Informisierung durch GerX wegschneiden, aber ich finde den Ansatz, dass man hier "Max'" (mit Apostroph) als zusätzliche Vokabel in der Understand-Phrase angibt, pragmatischer.

Eine Anmerkung noch zu den Namen der Körperteile: Man kann die Nase einzelner Person natürlich anders nennen, "Zinken" etwa. Wenn man den #003399 ändert, bleibt aber das Schema bestehen: "Bernds Zinken" oder "Zinken des Gemüsehändlers".

Wenn man die gesamte Phrase ändern will, reicht eine #003399 nach meiner Erfahrung nicht. Ich vermute, dass die Regel in GerX "genauer" ist und daher Vorrang hat. So geht es aber:

003399

(Allerdings meckert der Libcheck, wenn ich nicht explizit sage, dass die Nase nicht mehr weiblich sein soll. Schließen sich #003399 und #003399 nicht gegenseitig aus? In I6 nicht, aber ich dachte, I7 sei da einen Schritt weiter.)

Geschrieben um 02:10 am 30.11.2011 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Klasse, Martin, dankeschön. Und es hat sich gelohnt!

Wie gut, dass Du Max und Moritz erwähnt hast, so konnte ich die Doku entsprechend korrigieren (natürlich muss im Genitv der Namen ein Apostroph stehen, wenn der Auslaut ein /s/ ist und nicht der letzte Buchstabe ein S).

Martin:

Allerdings meckert der Libcheck, wenn ich nicht explizit sage, dass die Nase nicht mehr weiblich sein soll. Schließen sich male und female nicht gegenseitig aus? In I6 nicht, aber ich dachte, I7 sei da einen Schritt weiter.

Aua!! Ja, im Original-I7 sind male/female eine Either-or-Eigenschaft; male wird als ~female (nicht female) dargestellt (oder umgekehrt, weiß ich jetzt gerade nicht). Jedenfalls verlangen Deine deform-Gender-Abfragen eindeutige Verhältnisse an der Geschlechterfront. Frühe Versuche mit einem "grammatical gender" (masculine, feminine, etc.) zusätzlich zu dem biologischen Genus haben wir eingestellt, weil es im Quelltext zu viel Schreibkram war. Bequemer ist es "The table is a male supporter." schreiben zu können, auch wenn das eigentlich Unfug ist. Den Numerus als "vierten Genus" zu benutzen ist ebenfalls äußerst bequem.

Deshalb haben wir die Eigenschaften male, female und neuter eindeutig gemacht, aber die nötigen Auschlussregeln leider nur halbherzig ausgeführt (wahrscheinlich, weil wir damals noch nicht so genau wussten, was da eigentlich los ist) und dann nie wieder angefasst.

Du hast also mit dem Libcheck einen prähistorischen Fehler in GerX aufgespürt und ich liefere in einer neuen Testversion folgende Ausschlussregeln nach:

blue

Ich hoffe, ich habe nichts vergessen. Erste Tests zeigen keine Probleme. Aber das will ja bei I7 nichts heißen.

Übrigens: Im nächsten Inform/GerX Version 4 wird es den "grammatical gender" wieder geben. Dann wird man wohl Objekte, analog zum Changing Gender, so definieren können:

red

Aber das dauert leider noch etwas.

Die von mir benutzte Testversion ist hier:

http://ifiction.pageturner.de/inform7/test/German_3-111130--TEST1.zip

Vielen Dank noch einmal und beste Grüße,

Christian

Geschrieben um 08:22 am 30.11.2011 | Zitat | Editieren | Löschen
Bushin
Mitglied
Bachelor Gumby
Beiträge: 53

( ... Oh oh...jetzt hab ich glaub ich Arbeit lol ich hab die Dummheit begangen, die meisten plural-named Objekte in meinem aktuellen Quelltext mit beispielsweise "...is male and plural-named" zu hinterlegen. An und für sich Blödsinn aber kam mir irgendwie schlüßig vor weil ein Eimer eben male is - und mehrere davon dann außerdem plural-named. g und keiner hat gemeckert.

Darf ich kurz fragen: "nose (f)" -> das "f" meint -> female nehme ich an. Ich war da etwas verwirrt, als ich das in Martins Code gesehen hatte. Soweit ich mir das jetzt selbst zamreime: ab Gerx 4 kann ich die Phrase "A Nose is a female thing" mit "A Nose (f) is a thing." darstellen?

(örgs* oder muss das vielleicht sogar?)

VG

Bushin)

Geschrieben um 10:08 am 30.11.2011 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Bushin:

An und für sich Blödsinn aber kam mir irgendwie schlüßig vor weil ein Eimer eben male is - und mehrere davon dann außerdem plural-named. g und keiner hat gemeckert.

Kombinationen mit plural-named wurden vorher schon ausgeschlossen (nicht angemeckert sondern einfach geändert und eindeutig gemacht), ich habe die Ausschließerei nur ergänzt. Wenn Du Dir Deine Objekte mit SHOWME genauer ansiehst, dürfte nur einer der vier Genus (ja, ich weiß, das ist verwirrend, aber auch der Plural ist in GerX ein Genus) gesetzt sein.

Bushin:

Darf ich kurz fragen: "nose (f)" -> das "f" meint -> female nehme ich an.

Nein, nicht ganz: f heißt eigentlich "feminine". Wir benutzen die Abkürzungen m, f, n und p (femininum, maskulinum, neutrum, plural) für den "Changing Gender", also die Kennzeichnung von Vokabeln, die vom Hauptgeschlecht des Objekts abweichen. Vokabeln, deren Genus mit dem des Hauptobjekts übereinstimmt, brauchen nicht gekennzeichnet werden (kann man in Fällen, in denen das Objekt noch nicht feststeht aber trotzdem machen) Also z.B.:

blue

Siehe dazu auch Kurzdoku Kapitel 4.5: Angabe des Genus für Synonyme mit abweichendem Geschlecht (Changing Gender).

Diese Kennzeichnungsform soll auch irgendwann mal für den Hauptgenus möglich sein, das ist aber absolute Zukunftsmusik und erfordert Änderungen im I7-Compiler, die Graham noch nicht fertig hat.

Geschrieben um 10:48 am 30.11.2011 | Zitat | Editieren | Löschen
Bushin
Mitglied
Bachelor Gumby
Beiträge: 53

Ah ok, logisch, da stehts ja.

Also ich glaub ich zieh mir jetz erst noch ma die Kurzdoku von vorne bis hinten rein. Bisher gings ganz gut ohne jedes Detail zu kennen aber jetz wirds doch langsam fad. Danke für Aufklärung.

Geschrieben um 15:01 am 30.11.2011 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Es ist zum verrückt werden!

Die ergänzten Genus-Definitionen der aktuellen Testversion haben ein weiteres Problem offengelegt, das man sich vielleicht einmal näher anschauen sollte: Die Zuweisung des Genus funktioniert nicht mehr richtig, wenn man Klassen (Kinds) benutzt:

blue

Mein Testspiel:

showme pfeil

ein Pfeil - arrow

Ort: in dem Körperkult-Klub

singular-named, improper-named; unlit, inedible, portable, neuter

printed name: "Pfeil"

printed plural name: "Pfeile"

indefinite article: none

description: none

initial appearance: none

special indefinite article: pending

Die Klasse Arrow bekommt ganz korrekt male als Attribut:



    class K2_thing

    has male

    with short_name text_routine_4

    with plural SC_2

    with parse_name Parse_Name_GV277

;```

Werden dann Instanzen der Klasse arrow in die Welt gesetzt, wird male wieder genommen:

```Object -> X130 ""

    class K18_arrow

    with IK18_Count 0

    with IK18_Link X131

    with KD_Count 18

    with vector 0

    with list_together 0

    has mark_as_thing

    with IK2_Count 12

    with IK2_Link X131

    has ~male

    with action_bitmap 0 0 0 0 0 0

;```

Offenbar berücksichtigen die Definitionen à la "A neuter thing is never male." nicht eventuell vorhandene Attribute in den Klassen, die das Objekt beerbt. So nach dem Motto: Oh, neues Objekt, also "usually neuter" und dann, ach so, ein "neuter thing" kann ja nicht "male" sein, also weg mit der Männlichkeit.

Natürlich könnte man ganz einfach schreiben:

blue

Aber so richtig schön I7-mäßig ist das nicht mehr. Also, immer dran denken, wenn Klassen benutzt werden: Der Genus wird erst beim Objekt definiert und nicht schon bei der Klasse. Grmbl.
Geschrieben um 16:41 am 02.12.2011 | Zitat | Editieren | Löschen
Bushin
Mitglied
Bachelor Gumby
Beiträge: 53

Zitat:

Damit man nicht für jedes Synonym ein Extra-Token mit der incorporation relation schreiben muss, kann man zunächst alle einfachen Synonyme in einem Sammel-Token zusammenführen und für dieses Sammel-Token dann die verschiedenen Genitiv-Muster definieren.

Vielen Dank für den kleinen Seitenschwenker, btw.

Anfängerfehler oder einfach nur gepennt oder was auch immer - bin noch gar nicht auf die Idee gekommen, Understandphrasen mit Tokens zu kombinieren.

Das nenn ich Entlastung g

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