IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Problem bei Antwort auf "Was meinst du, den....."
AntwortenNeues ThemaNeue Umfrage
» Mehrere Seiten: 12

Problem bei Antwort auf "Was meinst du, den....."

Geschrieben um 16:20 am 22.01.2005 | Zitat | Editieren | Löschen
ChrisW
Mitglied
Dr Gumby
Beiträge: 275

So, hab das jetzt mal in einer Glulx+ZCode-Fassung umgesetzt, die zumindest bei mir bisher den Tests standgehalten hat. Wäre aber sehr dankbar, wenn sich das nochmal jemand anders anschauen oder es ausprobieren könnte. (Kris, du könntest es vielleicht mal testweise in deinem Projekt versuchen. Sicherheitskopie der german.h anlegen, die paar Änderungen hier durchführen und schauen, ob alles wie gewohnt läuft.)

Den Längencheck für UmlautAux im ZCode habe ich rausgelassen, weil die Gefahr eines Überlaufes aktuell ja nicht besteht. Ab 6/11 gibts im Rahmen der Glulx/ZCode-Angleichung dann endlich ne Library-Routine dafür.

In der german.h ab Zeile 824 eingefügt:



[UmlautAddress i letter next last skip start length;

 

 ! Vokabel auf Hilfsfeld schreiben

 #ifdef TARGET_GLULX;

   length = PrintAnyToArray(UmlautAux,9,i);

   start = 0;

 #ifnot; 

   @output_stream 3 UmlautAux;

   print (address) i;

   @output_stream -3;

   length = UmlautAux-->0;

   start = 2;

 #endif;

 

 ! Vokabel mit ersetzten Umlauten ausgeben

 for (i=0 : i < length : i++) {

     letter = UmlautAux->(i+start);

     if(i+1 >= length)

           next = 0;

     else  next = UmlautAux ->(i+start+1);

     

     if(letter == 'a' && next == 'e') {

        print "ä"; skip = true; }

     else if(letter == 'o' && next == 'e') {

        print "ö"; skip = true; }

     else if(letter == 'u' && next == 'e' &&

             last ~= 'q' or 'e') {

        print "ü"; skip = true; }

     else if(skip)

        skip = false;

     else

        print (char)letter;

     

     last = letter;

 };

];```

LanguageVerb ab Zeile 957 ersetzt durch diese Variante:

```[ LanguageVerb i;

  switch(i) {

     'l//': print "schaue"; rtrue;

     'z//': print "warte"; rtrue;

     'j//': print "ja"; rtrue;

     'x//','u//','b//': print "betrachte"; rtrue;

     'v//': print "verlasse"; rtrue;

     'i//','inv','inventory': print "Inventar"; rtrue;

     

     'giess': print "gieße"; rtrue;

     'uebertrag': print "übertrage"; rtrue;

     'ueberreich': print "überreiche"; rtrue;

     'praesentier': print "präsentiere"; rtrue;

     'konsultier': print "konsultiere"; rtrue;

     'durchquer': print "durchquere"; rtrue;

     'begutacht': print "begutachte"; rtrue;

     'durchsuch', 'durchwuehl', 'durchstoeber':

             print "durchsuche"; rtrue;

     'schliess': print "schließe"; rtrue;

     'verschliess': print "verschließe"; rtrue;

     'verriegel': print "verriegle"; rtrue;

     'zertruemmer': print "zertrümmere"; rtrue;

     'unterricht': print "unterrichte"; rtrue;

     'zerdrueck': print "zerdrücke"; rtrue;

     'zerquetsch': print "zerquetsche"; rtrue;

     'durchschneid': print "durchschneide"; rtrue;

     'zerschneid': print "zerschneide"; rtrue;

             

     'betritt','tritt','nimm','gib','wirf','brich','zerbrich',

     'iss','friss', 'sprich', 'sieh', 'lies',

     'erklimm', 'erwirb' : print (UmlautAddress)i; rtrue;

     

     default: if(PrintVerb(i) == 0)

                 print (UmlautAddress)i, "e";

              rtrue;

  };

];```

Die unterschiedlichen Startpunkte für Glulx und ZCode sind nötig, weil PrintAnyToArray nicht die Arraylänge nach Array-->0 kopiert.
Geschrieben um 18:46 am 22.01.2005 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

ChrisW:

So, hab das jetzt mal in einer Glulx+ZCode-Fassung umgesetzt, ...

Sehr schön!

Du könntest die LanguageVerb noch etwas abkürzen, wenn du 'übertrag', 'durchquer', 'begutacht', 'durchsuch', 'zerdrück' und wenn dich die etwas holprige Endung nicht stört auch 'verriegel' rausschmeißt.

ChrisW:

Die Unterstützung für double-v8, also Z-Code-Dateien mit 1024KByte, ist nett, wenngleich im deutschsprachigen Raum auch noch niemand am aktuellen 512er-Limit gescheitert ist.

Double v8 wäre nicht schlecht, obwohl bei richtig großen Spielen dann wahrscheinlich eher die 64k-Begrenzung für den lesbaren Speicher ein Problem wäre.

Clever wäre ein "Variable v8", so dass der packing factor im Header festgelegt würde und nicht durch die Versionsnummer. (z5 und z8 unterscheiden sich ja allein durch diesen Faktor.) Die Länge der Vokabeln könnte man auch dort festlegen.

ChrisW:

In der Library endlich ein intelligentes UNLOCK, welches, wenn der Spieler den benötigten Schlüssel mit sich führt, automatisch diesen zum Aufschließen auswählt. usw. usf. träum

So etwas wäre wohl besser in einer Library Extension aufgehoben, denke ich, denn nicht jedes Adventure hat viele Schlüssel. Grundsätzlich sind solche Erleichterungen für den Spieler aber eine tolle Sache. (Und leider für meinen Alltags-Schlüsselbund noch nicht implementiert.)

ChrisW:

In Glulx gilt die 9-Zeichen-Beschränkung im Dictionary standardmäßig ebenfalls, kann allerdings per Compiler-Switch DICT_WORD_SIZE angehoben werden.

Die Z-Maschine erlaubt es, die Größe der Dictionary-Einträge zu modifizieren. Allerdings sind die Vokabeln selbst immer neun Zeichen lang, die in sechs Bytes abgelegt werden. Die darauf folgenden Bytes enthalten lediglich Flaggen. In Inform werden meines Wissens Sieben-Byte-Einträge benutzt, im letzten Byte ist die Information enthalten, ob ein Wort ein Verb ist, oder ob es mit '...//p' als Plural definiert wurde.

Geschrieben um 18:52 am 22.01.2005 | Zitat | Editieren | Löschen
Kris
Mitglied
Dr Gumby
Beiträge: 181

Ich habe das erstmal auf neutralem Boden getestet (erstmal nur Glulx), und es funktioniert.

Allerdings habe ich den Code (also beide Teile) in einer separaten LangVerb.h gespeichert.

Dann folgendes:



Include "Parser.h";

Include "LangVerb.h";```

Damit bleibt die german.h erstmal unverändert, außerdem kann man der Extension jederzeit noch Verben hinzufügen wenn einem etwas einfällt ohne in die german.h eingreifen zu müssen.

Ich werde die LangVerb.h ab sofort in mein Spiel einbauen, sollte mir (oder den Testern) etwas auffallen, melde ich mich.

Sollte sie so laufen, würde ich sie mal ins Archiv hochladen, es sieht doch wirklich netter aus bei der Ausgabe :-)

Danke für die Mühe und Gruß

Kris

NACHTRAG:

ChrisW:

Mit "würde ich sie mal ins Archiv hochladen" meine ich natürlich dich, falls das falsch verstanden wurde :-)
Geschrieben um 20:49 am 22.01.2005 | Zitat | Editieren | Löschen
ChrisW
Mitglied
Dr Gumby
Beiträge: 275

Martin:

Du könntest die LanguageVerb noch etwas abkürzen...

Argh, stimmt. Diese Verben haben ja nur neun Zeichen. :)

Martin:

So etwas (intelligentes UNLOCK) wäre wohl besser in einer Library Extension aufgehoben, denke ich....

Schon richtig. Viele Änderungen in der 6/11 und der geplanten darauffolgenden Version sind Dinge, die schon vorher in Extensions existierten. So bspw. die Möglichkeit mit LOOK TO THE NORTH usw. in verschiedene Himmelsrichtungen zu schauen. Ob das in die Standardlibrary muss, darüber kann man streiten.

Zitat:

Die Z-Maschine erlaubt es, die Größe der Dictionary-Einträge zu modifizieren. Allerdings sind die Vokabeln selbst immer neun Zeichen lang, die in sechs Bytes abgelegt werden.

Eben das wird in Glulx nur vom Compiler festgelegt, laut Glulx Technical Reference, die Vokabeln können dort also auch länger sein:

Glulx TR:

  • The Dictionary

This structure is generated by the compiler, and used by the library.

long: number of words

...each word: {

byte: 60 (type identifier for dict words)

bytes[9]: nine bytes of lower-case text, zero-padded

short: flags

short: verb number

short: unused (zero)

}

...

The nine-character word length is actually variable, controlled by the

$DICT_WORD_SIZE memory setting.

...

Kris:

Allerdings habe ich den Code (also beide Teile) in einer separaten LangVerb.h gespeichert. ... Damit bleibt die german.h erstmal unverändert, außerdem kann man der Extension jederzeit noch Verben hinzufügen wenn einem etwas einfällt ohne in die german.h eingreifen zu müssen.

Schöne Variante. Und toll, dass du es gleich ausprobiert hast. Allerdings finde ich schon, dass die neue Variante, so wir sie denn ausführlich getestet haben, in die offizielle german.h sollte.

Trotzdem kannst du sie noch im Quellcode deines Spiels erweitern: Dazu wird am Ende die Routine PrintVerb aufgerufen, so sie denn vorhanden ist. Wenn du in deinem eigenen Quellcode diese Routine anlegst, kannst du dort nach Lust und Laune noch Ersetzungen hinzufügen, ohne irgend etwas an der german.h ändern zu müssen.

Geschrieben um 09:26 am 23.01.2005 | Zitat | Editieren | Löschen
Kris
Mitglied
Dr Gumby
Beiträge: 181

ChrisW:

Allerdings finde ich schon, dass die neue Variante, so wir sie denn ausführlich getestet haben, in die offizielle german.h sollte.

Klar, keine Frage.

Nur so lange es keine neue offizielle german.h gibt, arbeite ich lieber mit Extensions. Ich habe schon eine Liste von Änderungen (wie z.B. der Akk-Nom Fehler in der WritListFrom) die ich direkt in der lib vorgenommen habe.

Damit ich nicht den Überblick verliere, wenn es eine neue lib gibt, halte ich die Liste lieber so klein wie möglich :-)

Gruß

Kris

» Mehrere Seiten: 12
AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz