Eine deutsche Übersetzung des
INFORM
Inform (c) 1993-97 Graham Nelson
Übersetzung (c) 1998/99 Toni Arnold
letzte Modifikation: 16.12.99 / 15.1.02
Vorwort zur Übersetzung
Ein bisschen deutsche Grammatik
Deutsche Umlaute
Was ist mit der Deklination?
Deutsche Artikel
Adjektive
Nachgeordnete Wortgruppen
Pronomen
Deklinationstabellen
Ansätze einer technischen Dokumentation
Neu! Version 6/10 zum Runterladen
"Lizenz"
Links
Inform
homepage
interactive fiction archive
meine Interaktive Belletristik-Seite
Deutscher Inform von Ralf
Hermann (mit automatischer Deklination!)
www.interactive-fiction.de: weitere links auf
der Seite von Bernd Röhling
www.textfire.de Textfeuer...
Dieses erste Computer-Textabenteuer überhaupt wurde von Don Woods 1977 publiziert und basierte auf einem Geschenk von Will Crowther an seine Kinder, welches er 1972 schrieb. Die Inform 6 - Version von Graham Nelson machte es möglich, dieses Spiel ins Deutsche zu übersetzen.
Kurzanleitung zur Inbetriebnahme
Spieledatei herunterladen durch anklicken; da MS-Explorer mit .Z5-Files Probleme macht im schlimmsten Fall mit einem ftp-Programm das Spiel von ftp.gmd.de runterladen. Bei Netscape sich vom Zeichenchaos nicht beeindrucken lassen und das Spiel als source (oder "HTML") speichern. Sich einen passenden Interpreter für die Z-Code-Spieledatei herunterladen. Damit das Spiel starten. Für Neulinge empfiehlt es sich, zuerst einmal "Hilfe" (mit Return abschliessen) zu tippen. So wird das Hilfemenu aufgerufen. Dort findet sich auch ein interessantes "historisches Vorwort", worin geschrieben steht, wie es zum Abenteuer kam...
Schnell zeigte sich bei meinen ersten Übersetzugsversuchen,
dass die deutsche Sprache eine schwere Sprache ist - ein Phänomen,
dass uns Muttersprachlern gewöhnlich gar nicht auffällt. Ich
stelle diese Bemerkung voran um klarzustellen, dass die vorliegende Übersetzung
keine endgültige Lösung des Problems sein kann und will. Viele
Phänomene sind noch nicht behandelt, viele Fehler lauern noch unentdeckt
in den Tiefen des Programms. Die vorliegende Bibliothek wird deshalb ständig
aktualisiert.
Das Spiel RUMMEL.Z5, eine Rummelplatzgeschichte,
ist bloss als kurzes Beispiel gedacht. Ich arbeite noch an dieser Geschichte
und das Veröffentlichen des Quelltextes würde die Spielfreude
zunichte machen.
Diese Dokumentation hier behandelt nur Dinge, die spezifisch für
die deutsche Übersetzung sind. Leute, die noch nie in Inform programmiert
haben, sollten vielleicht erstmal einen Blick auf die Literatur auf der
Inform-Seite
werfen.
Ein Problem für sich stellen die Umlaute dar. Dies hat historische Gründe: Der ASCII-Zeichensatz, auf welchem Inform basiert, trägt das Amerika schon in den Initialen. Da für Amerikaner alle Sprachen ausser Englisch barbarische Sprachen sind, dachten sie nicht daran, europäische Akzente in ihr System einzubauen. Wir Barbaren müssen diese Nachlässigkeit nun ausbaden. Im Einzelnen:
In gedrucktem Text, also in gedruckten Namen von Objekten und Beschreibungen,
können folgende für Deutsch spezifizierten Inform-Sonderzeichen
verwendet werden (siehe auch nächstes Kapitel über die Deklination):
@:a | ä |
@:o | ö |
@:u | ü |
@:A | Ä |
@:O | Ö |
@:U | Ü |
@ss | ß |
print "Der L@:owe br@:ullt @:angstlich.";
In der name-Property, wo die Namen für das Objekt
eingegeben werden, die vom Parser erkannt werden, funktionieren diese Umlaute
jedoch nicht. Es gibt erst einige wenige Z-Code-Interpreter,
die Umlaute verarbeiten können. Die Umlaute werden transkribiert
in deren Entsprechungen mit zwei Buchstaben ohne Akzent. Damit können
deutsche Spiele auch mit älteren Interpretern oder Tastaturen ohne
Umlaute gespielt werden.
Grossbuchstaben werden vom Interpreter in Kleinbuchstaben umgewandelt.
Es sind also folgende Entsprechungen zu verwenden:
ä | ae |
ö | oe |
ü | ue |
ß | ss |
Object -> loewe,
has male,
with short_name "L@:owe",
dekl 6,
name "Loewe";
sub pattern_matching {
s/ä/\@:a/g;
s/Ä/\@:A/g,
s/ö/\@:o/g;
s/Ö/\@:O/g;
s/ü/\@:u/g;
s/Ü/\@:U/g;
s/ß/\@ss/g;
s/"/~/g;
};
Die Publikation eines deutschen Spiels ist angesichts der US-amerikanisch geprägten Z-Code-Interpreter-Situation nicht gerade zum verzweifeln (danke an alle, die zur Behebung des Problems beigetragen haben :-), aber es lässt sich wohl nicht vermeiden, dass auch eine Version ohne Umlaute publiziert werden muss. Ein ähnliches Problem existiert mit farbigen Spielen (z.B. Photopia). Da ich auschliesslich Schwarzweissmonitoren benutze, habe ich wenigstens dieses Problem nicht ;-) Um ein Spiel automatisch umzuwandeln, muss der pattern_matching-Block folgendermassen überschrieben werden:
sub pattern_matching {
s/\@:a/ae/g;
s/\@:A/Ae/g,
s/\@:o/oe/g;
s/\@:O/Oe/g;
s/\@:u/ue/g;
s/\@:U/Ue/g;
s/\@ss/ss/g;
};
Das Perl-Script befindet sich unter txtinf.perl.
Ein bisschen deutsche Grammatik
Im Gegensatz zum Englischen gibt es im Deutschen vier verschiedene Fälle (Kasus), und zwar Nominativ, Akkusativ, Dativ und Genitiv. Des weiteren gibt es drei Geschlechter (Maskulin, Feminin, Neutrum) und zwei Zahlen (Singular, Plural). Je nach seiner Funktion im Satz muss eine Nominalphrase in einen bestimmten Fall gesetzt werden: das direkte Objekt ist im Akkusativ, das indirekte Objekt im Dativ. Der Genitiv drückt in der Regel so etwas wie einen Besitz aus.
Ein Beispiel:
Gib dem Kind ein Buch des Zauberers.
\ / \ / \
/ \ /
- ----- ------
---------
| |
| |
| |
NP[Akk] NP[Gen]
| |
\ /
| |
-----------
| |
|
Verb NP[Dat]
NP[Akk]
\ |
/
--------------------
|
Satz
im Imperativ
Dabei ist die Reihenfolge der Akkusativ- und der Dativ-NP umkehrbar. Werden die Dativ- und die Genitiv-NP vertauscht, muss jedoch der Artikel vor der Dativ-NP weggelassen werden. "das Buch des Zauberers" wird zu "des Zauberers Buch" - ein eher ungebräuchlicher, aber syntaktisch korrekter Ausdruck.
Die Fälle werden im Deutschen durch unterschiedliche
Artikel und Suffixe ausgedrückt. Die Zuordnung ist jedoch mitnichten
eindeutig: "des Zauberers" in obigem Beispiel ist zwar eindeutig Genitiv
Singular, "das Buch" könnte jedoch auch ein Nominativ sein. Dies verkompliziert
das Parsen ungemein. Genau das ist der Grund, weshalb ich das deutsche
Kasus-Numerus-Genus-System im Inform-Parser noch nicht implementiert habe.
Konkret funktioniert das Parsing im Augenblick so, dass schrittweise alls
möglichen Nomen-Suffixe abgespalten werden bis das Wort im Lexikon
gefunden wird. Fälle werden so gar nicht erkannt.
Die Ausgabe auf dem Bildschirm dagegen wird weitgehend
unterstützt.
Für die Implementation der Ausgaberoutinen benutze ich die Deklinationstabelle mit 10 Deklinatonstypen für Nomen im Grammatik-Duden*. Wird im Spiel ein neues Objekt deklariert, ist der zugehörige Deklinationstyp als Inform-Property immer anzugeben. Das sieht mit einem Adjektiv im Minimum so aus:
Object zauberer,
has male,
with
short_name "Zauberer"
dekl 4,
adj "schlau";
Monatelang prangte obiges Beispiel noch minimaler
an dieser Stelle mit der ersten Zeile Object zauberer "Zauberer".
Dies führt jedoch allgemein dazu, dass zum Beispiel "Lampe" im Plural
als "Lampeen" dekliniert wird, da keine Suffix-Elisionen mehr möglich
sind. Es empfiehlt sich daher, grundsätzlich alle "echten" Objekte
immer mit einer short_name-Property zu versehen. Einzige Ausnahme
sind die Raum-"Objekte", welche nie ge"print"et und damit dekliniert werden.
Der Kasus des Artikels wird für die Bildschirmausgabe
von Objekten folgendermassen deklariert (das Beispiel druckt den oben analysierten
Satz):
print "Gib ",(dem) kind," ",(ein) buch," ",(des) zauberer,".";
Da die Artikel nur in der maskulinen Form eindeutig
sind, werden sie immer so angegeben. Hat das Wort ein anderes Geschlecht
wird der Artikel automatisch entsprechend angepasst. Dank den Deklinationstabellen
werden die Nomen im Singular meist richtig dekliniert.
Da einige dieser Artikel auch in der Verb-Library vorkommen, wurde
die Datei VERBLIBM.H für die deutsche Übersetzung ebenfalls
modifiziert.
Im DEBUG-Modus kann ein Objekt zusammen mit seinen Adjektiven dekliniert werden. Dies erfolgt durch das Metaverb dekliniere (oder kurz dekl). Das Objekt muss in Sichtweite sein. Mit dekliniere komplett werden zusätzlich alle definierten Pronomen aufgerufen. Ein Beispiel, welches nebenbei auch demonstriert, dass die Umlaute in der Eingabe meistens nicht funktionieren: (Ausnahmen)
>dekliniere maedchen
das Mädchen
das Mädchen
dem Mädchen
des Mädchens
ein Mädchen
ein Mädchen
einem Mädchen
eines Mädchens
Ein Beispiel mit einem Plural-Objekt:
>dekliniere leute
die lieben Leute
die lieben Leute
den lieben Leuten
der lieben Leute
liebe Leute
liebe Leute
lieben Leuten
lieber Leute
Die Pluralform funktioniert bisher erst eingeschränkt:
Es wird immer die in der Property plural
angegebene Form benutzt, wenn mehrere Inform-Objekte in einen Plural zusammengefasst
werden.
Hat dagegen ein Objekt das pluralname-Attribut
wie in obigem Beispiel, wird das Nomen richtig in der Pluralform dekliniert.
Dieses Attribut definiert das Nomen als einen Plural, obwohl es nur ein
einzelnes Inform-Objekt anspricht. Ein Beispiel wäre das Objekt leute,
welches eine einzelne Gruppe von Menschen meint.
Wenn die Deklinationsendung mit denselben Buchstaben
anfängt wie das Lemma aufhört, werden dieselben gelöscht.
Zum Beispiel wird "Auge-en" zu "Augen". Sollen diese und ähnliche
Korrekturen in der deutschen Morphologie funktionieren, muss der Name des
Objekts in der short_name-Property angegeben
werden. Sind keine Korrekturen verlangt kann der Name in der Objekt-Deklarationszeile
definiert werden.
Des weiteren ist der Name auf 254 Zeichen begrenzt
- Überlänge produziert eine Runtime-Warnung. Will man
längere Namen benutzen muss die Grösse der Arrays ta_ArrayBuf*
angepasst werden.
* Bd. 4. Duden "Grammatik der deutschen Gegenwartssprache",
5. Aufl., Mannheim; Leipzig; Wien; Zürich: Dudenverl., 1995, S.220
Es gibt acht neue Artikel welche die vier Fälle im Singular und Plural repräsentieren. Grosschreibung wird deklariert durch ein vorangestelltes "G". Diese deutschen Artikel ersetzen die Inform-Artikel (the)und (a):
Definit:
Nom | Akk | Dat | Gen |
(der) | (den) | (dem) | (des) |
(GDer) | (GDen) | (GDem) | (GDes) |
Indefinit:
Nom | Akk | Dat | Gen |
(ein) | (einen) | (einem) | (eines) |
(GEin) | (GEinen) | (GEinem) | (GEines) |
"Kein ..." :
Nom | Akk | Dat | Gen |
(kein) | (keinen) | (keinem) | (keines) |
(GKein) | (GKeinen) | (GKeinem) | (GKeines) |
Kein Artikel (nach Präpositionen):
Nom | Akk | Dat | Gen |
(_er) | (_en) | (_em) | (_es) |
Die Artikel werden jeweils nur in der maskulinen Form angegeben da diese eindeutig ist. Fehlende Artikel nach Präpositionen sollen über die (_e*)-Routinen explizite als fehlend gesetzt werden, sonst werden das Nomen und die Adkjektive nicht dekliniert.
Der Genus wird für jedes Objekt definiert über die folgenden
Attribute:
male | female | neuter |
Eigennamen
Eigennamen können in Inform mit der property proper als solche deklariert werden. Dies hat zur Folge, dass der Artikel weggelassen wird. Sollte eigentlich ein indefiniter Artikel gedruckt werden, wird dieser durch den Definiten ersetzt Ein Beispiel:
Du siehst hier einen Soldaten.
aber mit Eigennamen:
Du siehst hier HD Läppli.
aber mit Adjektiven:
Du siehst hier den netten HD Läppli.
Objektspezifische indefinite Artikel
In Inform können fixe indefinite "Artikel" mit der Property article gesetzt werden. Dies wird benötigt einerseits für nicht zählbare Objekte im Singular ohne oder mit einem speziellen Artikel und für bestimmte Objekte, die nie mit indefinitem Artikel vorkommen. (Bei pluralname-Objekten, die immer im Plural stehen, wird der indefinite Artikel automatisch weggelassen). Wird mit article ein String deklariert, wird dieser zwar gedruckt, aber nicht dekliniert. Gleiches gilt für den Fall einer Routine. Die definit-Konstante ist speziell definiert, um definite Artikel zu erzwingen. Hat das (in diesem Fall "widersprüchliche" Objekt) zusätzlich das proper-Attribut, wird article wie in der englischen Version ignoriert. Drei Beispiele:
Du siehst hier Blut.
mit article ""
Du siehst hier viel böses Blut.
mit article "viel" und adj "b@:os"
Du siehst hier die andere Seite des H@:ugels.
mit article definit - im Unterschied zur englischen Version
eine spezielle Konstante
Die print (name) obj; -Konstruktion für "kein Artikel
drucken in jedem Fall" wird von dieser Übersetzung nicht unterstützt,
ist doch die Adjektivdeklination auch dann unklar, wenn vier Konstrukte
für vier Kasus definiert würden.
Pluralname
Mit dem Attribut pluralname kann festgelegt werden, dass ein
Objekt immer im Plural vorkommt. Damit die Deklination weiterhin funktioniert,
muss jedoch der Objektname im Code selbst in Singular angegeben werden.
Der Plural wird dann jeweils automatisch erzeugt.
Da im Deutschen die Adjektive speziell dekliniert werden, müssen
sie auch separat deklariert werden. Dafür steht seit Version 6/8 (danke
Max Kalus!) nur noch eine Property zur Verfügung namens
adj |
Es gibt im Deutschen die Möglichkeit, zu einer Nominalphrase nachgeordnete
Wortgruppen zu bilden, also z.B. "der Körper des Drachens".
Bei der Deklination wird jedoch nicht der Drache dekliniert, sondern dessen
Körper, es heisst also "die Überreste des Körpers
des Drachens". Aus diesem Grunde muss die nachgeordnete Wortgruppe separat
deklariert werden. Dies geschieht über die Property
post |
Object DragonCorpse
with dekl 1,
short_name "K@:orper",
post "des Drachens",
initial
"Der K@:orper eines riesigen, gr@:unen, toten Drachens liegt
auf einer Seite.",
name "drache" "koerper" "tot"
"drachenkoerper" "stinkend",
adj "stinkend" "gr@:un"
has male static;
Pronomen werden ähnlich definiert wie die Artikel:
Nom | Akk | Dat | Gen |
(er) | (ihn) | (ihm) | (seiner) |
(GEr) | (GIhn) | (GIhm) | (GSeiner) |
Demonstrativ:
Nom | Akk | Dat | Gen |
(dieser) | (diesen) | (diesem) | (dieses) |
(GDieser) | (GDiesen) | (GDiesem) | (GDieses) |
Mit "ist" oder "sind"
Für "(GEr) ist" gibt es die Kurzform:
GEristSiesind |
Der Deklinationstyp kann übers www unter
http://www.copyriot.com/tarnold/dekl.cgi
erkannt werden.
Offline ziehe man die Tabellen zu Rate:
Die Reihenfolge der Fälle entspricht den schweizerischen Gepflogenheiten.
Buchstaben in [eckigen Klammern] sind optional und werden von meinem System
bisher nicht erzeugt. Ebenfalls nicht erzeugt werden bisher Pluralumlautungen
wie in Apfel-Äpfel.
Maskulinum | Neutrum | ||
Sing | Nom | der Tag | das Jahr |
Akk | den Tag | das Jahr | |
Dat | dem Tag[-e] | dem Jahr[-e] | |
Gen | des Tag-[e]s | des Jahr-[e]s | |
Plur | Nom | die Tag-e | die Jahr-e |
Akk | die Tag-e | die Jahr-e | |
Dat | den Tag-en | den Jahr-en | |
Gen | der Tag-e | der Jahr-e |
Maskulinum | Neutrum | ||
Sing | Nom | der Apfel | das Segel |
Akk | den Apfel | das Segel | |
Dat | dem Apfel | dem Segel | |
Gen | des Apfel-s | des Segel-s | |
Plur | Nom | die Äpfel | die Segel |
Akk | die Äpfel | die Segel | |
Dat | den Äpfel-n | den Segel-n | |
Gen | der Äpfel | der Segel |
Maskulinum | Neutrum | ||
Sing | Nom | der Staat | das Auge |
Akk | den Staat | das Auge | |
Dat | dem Staat[-e] | dem Auge | |
Gen | des Staat-[e]s | des Auge-s | |
Plur | Nom | die Staat-en | die Auge-n |
Akk | die Staate-en | die Auge-n | |
Dat | den Staat-en | den Auge-n | |
Gen | der Staat-en | die Auge-n |
Maskulinum | Neutrum | ||
Sing | Nom | der Wald | das Bild |
Akk | den Wald | das Bild | |
Dat | dem Wald[-e] | dem Bild[-e] | |
Gen | des Wald-[e]s | des Bild-[e]s | |
Plur | Nom | die Wäld-er | die Bild-er |
Akk | die Wäld-er | die Bild-er | |
Dat | den Wäld-ern | den Bild-ern | |
Gen | der Wäld-er | der Bild-er |
Maskulinum | Neutrum | ||
Sing | Nom | der Opa | das Deck |
Akk | den Opa | das Deck | |
Dat | dem Opa | dem Deck | |
Gen | des Opa-s | des Deck-s | |
Plur | Nom | die Opa-s | die Deck-s |
Akk | die Opa-s | die Deck-s | |
Dat | den Opa-s | den Deck-s | |
Gen | der Opa-s | der Deck-s |
Maskulinum | ||
Sing | Nom | der Mensch |
Akk | den Mensch-en | |
Dat | dem Mensch-en | |
Gen | des Mensch-en | |
Plur | Nom | die Mensch-en |
Akk | die Mensch-en | |
Dat | den Mensch-en | |
Gen | der Mensch-en |
Femininum | ||
Sing | Nom | die Kraft |
Akk | die Kraft | |
Dat | der Kraft | |
Gen | der Kraft | |
Plur | Nom | die Kräft-e |
Akk | die Kräft-e | |
Dat | den Kräft-en | |
Gen | der Kräft-e |
Femininum | ||
Sing | Nom | die Mutter |
Akk | die Mutter | |
Dat | der Mutter | |
Gen | der Mutter | |
Plur | Nom | die Mütter |
Akk | die Mütter | |
Dat | den Mütter-n | |
Gen | der Mütter |
Femininum | ||
Sing | Nom | die Frau |
Akk | die Frau | |
Dat | der Frau | |
Gen | der Frau | |
Plur | Nom | die Frau-en |
Akk | die Frau-en | |
Dat | den Frau-en | |
Gen | der Frau-en |
Femininum | ||
Sing | Nom | die Oma |
Akk | die Oma | |
Dat | der Oma | |
Gen | der Oma | |
Plur | Nom | die Oma-s |
Akk | die Oma-s | |
Dat | den Oma-s | |
Gen | der Oma-s |
Ansätze einer technischen Dokumentation
Die ersten beiden der folgenden Dateien sind sowohl für Leute gedacht, die Inform in eine weitere, bisher noch nicht implementierte Sprache übersetzen wollen als auch für Leute, die "nur" mit dieser deutschen Inform-Version arbeiten wollen. Aus diesem Grunde sind sie nicht in Deutsch geschrieben, sondern in Englisch.
libr_97.txt
"Logbuch" der ersten deutschen Übersetzung der Libray, begonnen
im Jahre 1997
ASCII, Englisch
libr_98.txt
Erweiterungen seit der ersten Publikation, insbesondere Umlaute, Grammatik
und Bugs
ASCII, Englisch
libr_99.txt
Einfügen der Übersetzung in die neue Library-Version 6/9 und 6/10
ASCII, Deutsch
abent_98.txt
Änderungen am Abenteuer-Quelltext seit der ersten Publikation.
DOS-ASCII (Umlaute), Deutsch
Index mit Datum der letzten Modifikation
Deutsche Library 6/7
ginf67.tar.gz
Deutsche Library 6/8
ginf68.tar.gz
Deutsche Library 6/9
ginf69.tar.gz
Deutsche Library 6/10 GLULX
ginfg610.tar.gz
Als einzelne Dateien (hier Index):
german.h *
germang.h *
tgerman.h *
verblib.h
verblibm.h *
linkllv.h
parser.h
parserm.h
linklpa.h
infix.h
Mit einem Stern * gekennzeichnete Dateien sind für das Deutsche angepasst - ich mache hier insbesondere auf verblibm.h aufmerksam. Die anderen Dateien sind die Originaldateien von Graham Nelson.
dirs_2g.h
"Richtungen"-Verb: man kann sich immer die Ausgänge aus dem aktuellen
Raum anzeigen lassen.
goto.html
Doku aus Faulheit erst auf Englisch, da Experimentalversion. Implementiert
das aus Magnetic-Scrolls-Zeiten bekannte "gehe zu", welches selbständig
den kürstesten Weg zu einem schon besuchten Raum sucht.
Quelltext Spielklassiker "Abenteuer"
abent.inform
(Quelltext des Spiels)
abent.icl
(steuert den Compiler)
Batchdateien für DOS:
c_abent.bat (compiliert ein
Spiel mit Inform 6.15 in einem DOS-Fenster)
p_abent.bat (spielt das Spiel
[p für play] auf Knopfdruck mit DOS-Frotz)
Automatische Konversion von Umlauten ins Inform-Format:
txtinf.perl (Version 1.0b0, 10.3.99)
Batchdateien für DOS:
c_rummel.bat
p_rummel.bat
p_verben.bat (Windows,
spielt mit DOS-Frotz in einem neuen Fenster; quit=restart ohne weiteren
Klick)
Rummel-Beispiel-Spieldatei:
rummel.z5
rummel.z5.hqx
rummel.z5.zip
Z-Code-Interpreter
für die Spieldatei:
if-archive/.../zip
./zip/Index
(mit Kurzbeschreibung aller Interpreter-Versionen)
Z-Code-Interpreter,
die Umlaute unterstützen (if-archive/...):
DOS-Frotz
von Stefan Jokisch
ZIP
Infinity 1.4 für Mac von Matthew T. Russotto
FrotzS5 V1.3 (für Psion S5 Handheld)
von Fréderic Bouvry