German Inform Library
Letzte Änderung am Sonntag, den 1. August 1999. Seite erstellt am Freitag, den 5. Juni 1998.
Die German Inform Library, im weiteren kurz
ginform genannt, ist eine Bibliothek zur Erarbeitung
deutschsprachiger Adventures (Interactive Fiction) mit
Graham Nelsons Inform Compiler. Sie wird seit Dezember 1996 entwickelt und
verbessert
wurde bis Januar 2000 entwickelt
und stellt dem IF Autor einige mächtige Werkzeuge bereit:
- Eine automatische Deklination der Objektnamen
- Eine ausgefeilte »ß« Handhabung (sie passt sich selbsttätig an die Rechtschreibung des Spielers an)
- Eine einfache Objekterkennung durch Mustervergleich mit den Stammformen von Substantiven und Adjektiven
- Unterschiedliche Anreden: »Was willst Du tun?« oder »Was wollt Ihr tun?«
Wer nur ein mit ginform entwickeltes Adventure spielen will, der braucht weder diese Anleitung lesen noch ginform zu installieren. Die Bibliothek richtet sich einzig und allein an IF Autoren; für diese sind vielleicht auch folgende Seiten interessant:
Eine Alternative zu ginform: Toni Arnolds Inform auf Deutsch- Der Nachfolger zu ginform: Offizielle Deutsche Inform Library
- Ein Überblick über IF im Allgemeinen und Autorensysteme im Besonderen findet sich bei Interactive-Fiction.de
Copyright und Disclaimer
German Inform Library: Documentation
Copyright (C) 1997, 1998, 1999 Ralf Herrmann
$Release: 6.9.1$
$Revision: 1.4 $
$Date: 2008/01/13 20:48:42 $
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See the GNU Library General Public License for more details.
You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Technisches vorab
Um ein deutsches Adventure zu compilieren muß beim Compileraufruf die maximale Zahl der Verben hochgesetzt als auch die Sprache angegeben werden. Angenommen alle Library Dateien (Standard und ginform) lägen im Verzeichnis lib, sähe der Aufruf so aus:
inform $MAX_VERBS=200 $MAX_ZCODE_SIZE=50000 +language_name=German +lib lib/advent.inf
ginform reserviert die Variablen @17 bis @31 für den eigenen Gebrauch. Dies sollte aber keine allzu große Einschränkung für den Autor darstellen, da diese Variablen eher selten gebraucht werden.
Rechtschreibung und Umlaute
Aufgrund unterschiedlicher Handhabung des »ß« vor und nach der Reform der deutschen Rechtschreibung, sowie seiner Nichtanwendung in der Schweiz als auch den Problemen mancher Interpreter mit Umlauten erfordern und verdienen diese Sonderzeichen eine besondere Behandlung.
In der Eingabe werden die Umlaute immer durch ae, oe, ue und ss ersetzt, woraus folgt, dass im Wörterbuch eben diese Ersetzungen zu verwenden sind (dies erspart den Eintrag aller umgelauteten und nichtumgelauteten Schreibungen). Für die Ausgabe greift ginform auf verschiedene Variablen zurück, so dass Umlaute und das »ß« gemäß der vom Spieler gewünschten Rechtschreibung gewählt werden.
| Variable | Deutsch | Reform | Schweiz | Ohne Umlaut |
|---|---|---|---|---|
| @31 | ß | ss | ss | ss |
| @30 | ß | ß | ss | ss |
| @28 | ä | ä | ä | ae |
| @27 | Ä | Ä | Ä | Ae |
| @26 | ö | ö | ä | oe |
| @25 | Ö | Ö | Ö | Oe |
| @24 | ü | ü | ü | ue |
| @23 | Ü | Ü | Ü | Ue |
Ein IF Autor sollte ebenfalls diese Variablen anstelle Informs üblicher Syntax, also »@28« anstatt »@:a« benutzen, damit sein Spiel sich den Erfordernissen und Wünschen des Spielers anpasst.
Object river
with
short_name "gr@24nen Flu@31",
name 'fluss' 'gruen',
description "Das Wasser des Flusses glei@30t in allen T@26nen
von Gr@24n, was dem Flu@31 seinen Namen eintrug.",
has
male;
- Das Wasser des Flusses gleißt in allen Tönen von Grün, was dem Fluß... (alte Regeln)
- Das Wasser des Flusses gleißt in allen Tönen von Grün, was dem Fluss... (Rechtschreibreform)
- Das Wasser des Flusses gleisst in allen Tönen von Grün, was dem Fluss... (Schweizer Regeln)
- Das Wasser des Flusses gleisst in allen Toenen von Gruen, was dem Fluss... (ohne Umlaute)
Anrede
Über die Konstanten ANREDE_DU und ANREDE_IHR wird gesteuert, wie der Spieler ageredet wird, in freundlichem Du oder respektvollem Ihr. Soll die Anrede, entgegen der Regeln für Briefe, klein geschrieben werden, so kann dies mit der ANREDE_DU_KLEIN eingestellt werden.
Genus
Allen Objekten ist ihr grammatikalischer Genus (Maskulin, Feminin, Neutrum)
mittels der Attribute male, female und neuter
zuzuweisen, damit die Library diese richtig deklinieren bzw. den Artikel wählen kann.
Präpositionen
Mit einem Artikel verschmolzene Präpositionen (ins, aufs, vom) in der Eingabe werden
in die Präposition und den Artikel zerlegt. Dies ist bei der Wahl der
Eigenschaft name eines Objektes zu beachten, da etwa aus einer »Fliege im Bernstein«
»Fliege in dem Bernstein« wird.
Verben
Verben bei denen im Imperativ die Endung -e entfallen kann, müssen ohne diesesn Suffix in die Grammatik aufgenommen werden. Gleichfalls müssen Umlaute, wie bereits erwähnt, durch ihre Umschreibungen ae, oe, ue und ss ersetzt werden. Dadurch reduziert sich etwa der Eintrag für küsse (küsse, küss, küß, kuesse, kuess, kueß) auf kuess.
Eigenschaft name
Als Name eines Objektes (Eigenschaft) sind die Stammformen der Adjektive einzutragen, etwa schwarz bei einer schwarzen Truhe, so die Library die Endungen -er, -en, -em, -es und -e abschneidet. Weiterhin sind Umlaute in ihrer Umschreibung als ae, oe, ue und ss anzugeben. Dies erspart das Eintragen von mehreren Formen (insbesondere Akkussativ und Dativ) für die Adjektive.
Object marsian
with
short_name "kleinen gemeinen Gr@24nling vom Mars",
declination true true true false false,
name 'klein' 'gemein' 'gruenling' 'von' 'dem' 'mars',
has
male;
Eigenschaft short_name
Ist short_name ein String, so muß er im bestimmten Akkussativ angegeben
sein, damit die Library ihn richtig deklinieren kann. Also das alte Fass
und nicht ein altes Fass! Ist er eine Routine, so muß diese den
Namen entsprechend der Variablen short_name_case und indef_mode
ausgeben. Man beachte hierbei, daß für den Fall indef_mode == NULL kein
Artikel (starke Beugung) ausgegeben wurde.
Object stoff
with
short_name
[;
if (indef_mode == NULL) !* kein Artikel
switch (short_name_CASE)
{
CASE_NOM: "weicher Stoff";
CASE_GEN: "weichen Stoffes";
CASE_DAT: "weichem Stoff";
CASE_AKK: "weichen Stoff";
};
if (indef_mode == true) !* unbestimmter Artikel vorangestellt
switch (short_name_CASE)
{
CASE_NOM: "weicher Stoff"
CASE_GEN: "weichen Stoffes";
CASE_DAT: "weichen Stoff";
CASE_AKK: "weichen Stoff";
};
switch (short_name_CASE) !* bestimmter Artikel vorangestellt
{
CASE_NOM: "weiche Stoff";
CASE_GEN: "weichen Soffes";
CASE_DAT: "weichen Stoff";
CASE_AKK: "weichen Stoff";
};
],
has
male;
Die Routinen der Library zur automatischen Deklination sind recht ausgereift, so daß es selten notwendig sein sollte, dies alles selbst anzugeben; mehr dazu im Abschnitt Deklination.
Eigenschaft enter_type
Für ein betretbares Objekt, Aufzug, Bank, Bett, etc., kann mittels der Eigenschaft
enter_type die Ausgabe der Enter/GetOff/Exit Aktion angebpasst werden:
Object sessel
with
short_name
"bequemen Sessel",
enter_type
enter_sitze,
has
male enterable;
Mögliche Werte sind: enter_tritt, enter_sitze, enter_steige,
enter_liege, enter_klettere, enter_gehe, enter_springe
Eigenschaft article
Aufgrund einer Unzulänglichkeit des Parsers muß ein Artikel, sofern er sich abhängig vom Kasus ändert, als Routine deklariert werden. Allerdings kann diese auf die Routinen zur automatischen Deklination zurückgreifen.
Eigenschaft declination
Zwar ist die automatische Deklination bereits recht ausgereift, doch gibt es
Fälle bei denen der Autor der Library helfen muß: vornehmlich bei Namen bei denen
nicht alle Bestandteile zu deklinieren sind, bei Verwendung des Genitivs (worauf
ginform selbst verzichtet) oder bei substantivierten Adjektiven.
Jedes Wort des short_name korrespondiert mit einem Eintrag der
Eigenschaft declination, der bestimmt auf welche Weise es dekliniert
wird:
- true:
- Automatische Deklination
- false:
- Keine Deklination
- none
- Ab diesem Wort keine Deklination mehr (entspricht: false false false ... false)
- A0:
- (Substantiviertes Adjektiv) Dekliniere wie ein Adjektiv
- S1_es:
- (Singular, Substantiv) Füge im Genitiv ein "es" an
- S1_s:
- (Singular, Substantiv) Füge im Genitiv ein "s" an
- S1_ses:
- (Singular, Substantiv) Füge im Genitiv ein "ses" and
- S2_en:
- (Singular, Substantiv) Streiche im Nominativ die Endung "en" (Mensch-en)
- S2_en:
- (Singular, Substantiv) Streiche im Nominativ die Endung "n" (Kunde-n)
- S3:
- (Singular, Substantiv) Keine Änderung des Suffix
- P1:
- (Plural, Substantiv) Füge im Dativ ein "n" an
- P2:
- (Plural, Substantiv) Füge im Dativ ein "n" an
- P3:
- (Plural, Substantiv) Keine Änderungen
- P4:
- (Plural, Substantiv) Füge im Dativ ein "n" an
- P5:
- (Plural, Substantiv) Keine Änderungen
Die eigene Angabe der Deklination bei Adjektiven ist nicht vorgesehen. Sie kann nur durch "false" ganz unterbunden werden.
Nutzen der automatischen Deklination
Die Library kann den Namen eines Objektes nur dann deklinieren, wenn der
short_name als String vorliegt; wird er dagegen als Routine spezifiziert
obliegt dies dem Autor. Doch kann dieser auf folgende Routinen der Library
zurückgreifen:
- PrintAdjective(o, s, p);
- Dekliniert das Wort wie ein Adjektiv.
- PrintSubstantive(o, s, p);
- Dekliniert das Wort wie ein Substantiv.
- PrintName(o, s);
- Dekliniert den gesamten Namen (beachtet die Eigenschaft
declination)
Sollte die Fehlermeldung Library Runtime Error 15 auftreten, so wurde für s kein String übergeben! Bei allen Aufrufen steht o für das Objekt, s einen String und p ein Flag ob das Wort im Plural steht.
Object papier
with
short_name
[;
if (self hasnt general)
PrintName(self, "zerkn@24llte St@24ck Papier");
else
PrintName(self, "alte Landkarte");
],
declination true false true,
before
[;
Examine:
give self general;
self.declination = true true;
give self ~neuter;
give self female;
"Vorsichtig entfaltet und gl@28ttet Ihr das Papier und erkennt: es ist
eine alte Landkarte";
has
neuter;
Ausgabehilfen
Folgende Routinen können über den print (routine) obj; Befehl
eingesetzt werden:
- (der) (dem) (des) (den)
- der Eimer, dem Eimer, des Eimers, den Eimer
- (cDer) (cDen)
- Der Eimer, Den Eimer
- (xder) (xdem) (xdes) (xden)
- Der, Dem, Des, Den (immer gefolgt von einem Leerzeichen)
- (ein) (einem) (eines) (einen)
- ein Eimer, einem Eimer, eines Eimers, einen Eimer
- (er) (cEr)
- er, Er (bzw. sie, Sie oder es, Es)
- (ihn) (ihm)
- ihn, ihm
- (ist) obj
- ist (oder sind)
- (im) (vom)
- im Eimer, vom Eimer
- (keinen)
- keinen Eimer
