Geschrieben um 15:59 am 10.04.2004 | Zitat | Editieren | Löschen | |
Mitglied Dr Gumby Beiträge: 181 | Auch wenn die letzten Wochen fast nur Fragen von mir hier im Forum auftauchen, eine hab' ich noch: Nachdem ich Probleme mit der Deklination eines Objektes hatte, habe ich mal den "Bauer" aus dem PDF "Informis_de" erstellt:
|
Geschrieben um 16:28 am 10.04.2004 | Zitat | Editieren | Löschen | |
Mitglied Dr Gumby Beiträge: 275 | Komisch. Ich habe wirklich exakt deinen Quellcode übernommen (Copy&Paste) und es mal ausprobiert, und bei mir funktioniert es völlig problemlos. Kann dir da also leider nicht helfen... |
Geschrieben um 16:45 am 10.04.2004 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | ChrW:
...bei mir auch. Hmm, vielleicht kommt eine deiner Erweiterungen da in die Quere? Vielleicht könntest du einmal deine eigenen Erweiterungen (der Verben und so) ausblenden und den Code dann noch einmal testen? (Du weißt schon, der Schmetterling im amazonischen Regenwald, der mit seinem Flügelschlag das Osterwetter in Oberbayern durcheinanderbringt. Die Inform-Lib und das Weltklima sind sehr komplexe Systeme...) Ach ja, der Vollständigkeit halber:
|
Geschrieben um 18:37 am 10.04.2004 | Zitat | Editieren | Löschen | |
Mitglied Dr Gumby Beiträge: 181 | Sorry Leute, ich hatte die tgerman von 2001, es konnte also nicht klappen. (Ich muß wohl mal alle downloads sortieren bzw. den Informordner checken :-) Jetzt habe ich aber ein anderes Problem (hatte auch schon vor der "neuen" tgerman). short_name_indef wird nicht ausgegeben.
|
Geschrieben um 20:05 am 10.04.2004 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Zitat:
Theoretisch ist das wohl auch so, short_name_indef wird allerdings nur herangezogen, wenn die globale Variable indef_mode gesetzt ist. Diese wird im Moment von der Library allerdings nur während des Parsens gesetzt, um zwischen "nimm den Ball" und "nimm einen Ball" zu unterscheiden, bei der Ausgabe ist diese Flagge, so weit ich es gesehen habe, nicht berücksichtigt. (Außer bei der Ausgabe von Raumnamen, dann ist sie -1.) Wenn ich diese Flagge in den Routinen ein, einen usw. setzte, klappt es, aber es passiert folgendes:
(Das Verb dekl ist immer aktiv, wenn das Spiel im Debug-Modus kompiliert wird, du brauchst also den Hack mit each_turn nicht.) Die Endungen von "Beamter" stimmen übrigens mit den Endungen für Adjektive überein. Mein Duden lässt mich zwar darüber etwas im Unklaren, woher diese komische Dekination kommt, aber folgendes funktioniert...
... zwar auf den ersten Blick ganz gut:
...aber eben nur auf den ersten Blick: Hinter dem Namen des Objekts wird jetzt immer ein Leerzeichen ausgegeben, was etwas unfein ist. Wenn man short_name und die Angabe des Namens im Objektkopf weglässt, heißt es in meinem Fall "Du siehst einen Beamten (40)". Anregung für die Lib: Eine Konstante nur_Adjektiv oder adjective_only oder so für den short_name einführen, damit die Ausgabe des Namens nach dem Adjektiv aufhören kann. Dann kann man auch Namen wie "Ein Blinder" oder "ein Helles" definieren. Workaround für dich: Wende die gesetzlich vorgeschriebene Frauenquote im öffentlichen Dienst auch auf deine NPCs an:
Oder benutze T.A.G.:
(Na gut, beides nicht so besonders ernst gemeinte Vorschläge ;-) Du könntest wohl aus suffixes auch eine Routine machen, aber ich glaube, die wird nur mit dem Fall als Argument aufgerufen, die Information, ob ein bestimmter oder unbestimmter Artikel verwendet wird, ist nicht verfügbar. |
Geschrieben um 13:59 am 11.04.2004 | Zitat | Editieren | Löschen | |
Mitglied Dr Gumby Beiträge: 181 | Hallo Martin, prinzipiell ist die Idee mit der Quotenfrau nicht schlecht, letztendlich würde der Beamte aber aufgrund seines Geschlechts benachteiligt werden, das wollen wir ja auch nicht ;-) Aber im Ernst: Warum wird indef_mode nicht von Inform gesetzt. Im DM4 Seite 270 steht folgendes: Zitat:
with the kind of article applied to them: das rote Buch the red book (German) ein rotes Buch a red book In printing as in parsing, the library variable indef_mode holds true if an indefinite article attaches to the noun phrase and false otherwise. So one rather clumsy solution would be: Object Buch with ... short_name [; if (indef_mode) print "rotes Buch"; else print "rote Buch"; rtrue; ]; In fact, though, the library automatically looks for a short_name_indef property when printing short names in indefinite cases, and uses this instead of short_name. So: Object Buch with short_name "rote Buch", short_name_indef "rotes Buch"; Hier nochmal die wichtigste Zeile: Zitat:
article attaches to the noun phrase and false otherwise. Also nicht nur beim Parsen, auch beim Schreiben. Nur wird sie nicht gesetzt!?? Hat es etwas mit der deutschen Übersetzung zu tun? Ich habe auch einiges Schmutzige versucht, um das Leerzeichen aus deiner Lösung weg zu bekommen: Aber short_name (char)8; !(char)8 entspricht [delete] wird leider nicht akzeptiert (so'n Mist!!!) Meine Versuche (z.B. print (ein)self,indef_mode) ergaben immer 0 (also false), ich weiß aber nicht, ob sie schon wieder zrückgesetzt wurde. Gibt es eine Möglichkeit, die Variable zu verfolgen? Grüße und ein Frohes Osterfest Kris |
Geschrieben um 19:35 am 11.04.2004 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Zitat:
Ja, alle Routinen zur Ausgabe von Objektnamen rufen die Routine PSN__ auf (print short name, I assume). Dort habe ich in der ersten Zeile die Ausgabe von indef_mode platziert:
Und dann wird immer eine Null geschrieben, sprich, indef_mode wird nicht gesetzt wie im DM4 beschrieben. Zitat:
Ja. In der Englischen Original-Lib wird indef_mode korrekt gesetzt: 0 für Ausgabe mit bestimmtem Artikel, 1 für die Ausgabe mit unbestimmtem Artikel und -1 für die Ausgabe ohne Artikel, wie z.B. bei Raumnamen in der Statuszeile oder bei den Angaben zum jeweils betrachteten Objekt bei Multi-Tokens.
(IndefArt, CIndefArt, DefArt und CDefArt sind die Routinen, die bei den Ausgaberegeln (a), (A), (the) und (The) aufgerufen werden. (A) ist neu ab 6/11. Diese Zusammenhänge sind "fest verdrahtet", nehme ich an, da Inform bei Symbolnamen nicht auch Groß- und Kleinschreibung achtet und nur in diesem Spezialfall zwischen (the) und (The) unterscheidet. Es gibt keine Routine "the".) Die deutsche Lib definiert die Ausgaberegeln in tgerman.h:
Da ist nicht von indef_mode die Rede, es wird nicht gesetzt wie oben. Das war aber vielleicht auch von Toni Arnold nicht so vorgesehen, denn das Beispiel im DM4, das du zitiert hast, benutzt short_name_indef ja nur, um die Ausgabe des Adjektivs anzupassen, und das funktioniert ja auch nur im Nominativ. Als Ersatz hat die deutsche Lib ja das besser an die deutsche Sprache angepasste System der Adjektive.
Hehe, clever gedacht, aber blöd^H^H^H^Hnicht optimal gfelaufen: ZSCII ist nicht ASCII, und das Zeichen mit dem Code 8 ist nur für die Eingabe definiert. Die z-Maschine ist erbarmungslos: Was einmal gedruckt wurde, ist gedruckt. Deshalb folgender Vorschlag: Ersetze die Routine zur Ausgabe von Adjektiven am Anfang deines Code wie folgt:
Dann definiere deinen Beamten so:
Beim Beamten funktioniert's dann, wie es soll, der Code ist auch kompatibel zu eventuellen Post-Definitionen:
Ich hoffe, dass dieser Code andere Objektnamen nicht durcheinanderbringt, denke es aber nicht, schließlich wurde nur etwas Neues eingefügt. Bitte prüfe den Code einmal in einem industriellen Testfall - ich hoffe, dein Spiel hat mehr als hundert Objekte, hehe. Wenn sich die Ergänzung bewährt, könnte man überlegen, sie in einer der nächsten Aktualisierungen zu übernehmen. |
Geschrieben um 19:47 am 11.04.2004 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Zitat:
Ja, alle Routinen zur Ausgabe von Objektnamen rufen die Routine PSN__ auf (print short name, I assume). Dort habe ich in der ersten Zeile die Ausgabe von indef_mode platziert:
Und dann wird immer eine Null geschrieben, sprich, indef_mode wird nicht gesetzt wie im DM4 beschrieben. Zitat:
Ja. In der Englischen Original-Lib wird indef_mode korrekt gesetzt: 0 für Ausgabe mit bestimmtem Artikel, 1 für die Ausgabe mit unbestimmtem Artikel und -1 für die Ausgabe ohne Artikel, wie z.B. bei Raumnamen in der Statuszeile oder bei den Angaben zum jeweils betrachteten Objekt bei Multi-Tokens.
(IndefArt, CIndefArt, DefArt und CDefArt sind die Routinen, die bei den Ausgaberegeln (a), (A), (the) und (The) aufgerufen werden. (A) ist neu ab 6/11. Diese Zusammenhänge sind "fest verdrahtet", nehme ich an, da Inform bei Symbolnamen nicht auch Groß- und Kleinschreibung achtet und nur in diesem Spezialfall zwischen (the) und (The) unterscheidet. Es gibt keine Routine "the".) Die deutsche Lib definiert die Ausgaberegeln in tgerman.h:
Da ist nicht von indef_mode die Rede, es wird nicht gesetzt wie oben. Das war aber vielleicht auch von Toni Arnold nicht so vorgesehen, denn das Beispiel im DM4, das du zitiert hast, benutzt short_name_indef ja nur, um die Ausgabe des Adjektivs anzupassen, und das funktioniert ja auch nur im Nominativ. Als Ersatz hat die deutsche Lib ja das besser an die deutsche Sprache angepasste System der Adjektive.
Hehe, clever gedacht, aber blöd^H^H^H^Hnicht optimal gfelaufen: ZSCII ist nicht ASCII, und das Zeichen mit dem Code 8 ist nur für die Eingabe definiert. Die z-Maschine ist erbarmungslos: Was einmal gedruckt wurde, ist gedruckt. Deshalb folgender Vorschlag: Ersetze die Routine zur Ausgabe von Adjektiven am Anfang deines Code wie folgt:
Dann definiere deinen Beamten so:
Beim Beamten funktioniert's dann, wie es soll, der Code ist auch kompatibel zu eventuellen Post-Definitionen:
Ich hoffe, dass dieser Code andere Objektnamen nicht durcheinanderbringt, denke es aber nicht, schließlich wurde nur etwas Neues eingefügt. Bitte prüfe den Code einmal in einem industriellen Testfall - ich hoffe, dein Spiel hat mehr als hundert Objekte, hehe. Wenn sich die Ergänzung bewährt, könnte man überlegen, sie in einer der nächsten Aktualisierungen zu übernehmen. |
Geschrieben um 21:15 am 11.04.2004 | Zitat | Editieren | Löschen | |
Mitglied Dr Gumby Beiträge: 181 | Hi Martin, danke für deine Hilfe. Sonst hätte es halt doch erstmal eine Beamtin gegeben. Zitat:
Auf Papier schon, bin aber im Code erst bei etwas über 30. Werde den Beamten so implementieren und so oder so mal eine Meldung dazu geben. Ansonsten "Hut ab", klasse Lösung. Als ich mich vor ein paar Monaten für Inform entschied, war es Nostalgie (Infocom) und der Glaube, das ausgereifteste (weil schon sehr lange in Gebrauch) System gewählt zu haben. Aber ich merke schon, man kann noch viel in der Mechanik wurschteln :-) (was ja auch nicht verkehrt ist) Vielen Dank Kris |