German Inform Library

Die German Inform Library, im weiteren kurz ginform genannt, ist eine Bibliothek zur Erarbeitung deutschsprachiger Adventures (Interactive Fiction) mit Graham Nelsons Inform Compiler. (englisch) Sie wird seit Dezember 1996 entwickelt und verbessert und stellt dem IF Autor einige mächtige Werkzeuge bereit: 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:

Copyright und Disclaimer

German Inform Library: Documentation
Copyright (C) 1997, 1998, 1999 Ralf Herrmann

$Release: 6.9.1$
$Revision: 1.8 $
$Date: 1999/08/01 22:06:28 $

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.

VariableDeutschReformSchweizOhne Umlaut
@31ßssssss
@30ßßssss
@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;

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 die ginform 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