[ t e x t f i r e . d e - Startseite ]

Sitemap
Druckversion


Werkstatt

Das Enchanter-Magiesystem

Ein beliebtes Textadventure-Genre ist »Sword and Sorcery«, eine pseudomittelalterliche Welt, in der Magie eine wichtige Rolle spielt. Zur Funktionsweise der Magie gibt es verschiedene Ansätze. Ein klassisches System ist das von Infocom in der Enchanter-Trilogie verwendete.

Dieses System arbeitet mit Zaubersprüchen, die entweder auf Schriftrollen stehen oder in einem Zauberbuch. Werden Sprüche von einer Rolle gelesen, verschwindet diese danach. Ein Spruch, der in einem Buch steht, muss zunächst ins Gedächtnis gerufen werden, danach kann er, auch ohne Buch, gesprochen werden. Der Magier kann nur eine bestimmte Anzahl von Sprüchen im Gedächtnis behalten. (Mir ist dabei nicht ganz klar, wieso man Sprüche von einer Rolle direkt lesen kann, sie aber erst lernen muss, wenn sie im Zauberbuch stehen. Aber mit alten Traditionen soll man nicht brechen.)

Dieses Magie-System habe ich für Im Bannkreis [1] in TAG implementiert, und die wichtigsten Routinen in einer separaten Datei magie.adv zusammengestellt, die mit #DAT 'magie.adv' in TAG eingebunden werden kann. Die Funktionsweise wird hier kurz erklärt:

Zunächst gibt es die Objektklassen Spruch und Pergament sowie das Zauberbuch. Es kann nur ein Zauberbuch geben, und auf einem Pergament kann nur ein Spruch stehen.

Die einzelnen Sprüche sind Befehle. Die Wirkung der Sprüche wird im Ausführungsteil des Befehls beschrieben. Hier ist der Spruch Frotz mit dem dazugehörigen Objekten:

Bef     frotz
Name    'frotzen'
Verb    'frotze'
Syntax  dasObj (evtl)
Ausf
  Bed /(aObj = 0)
    'Da der Frotz-Spruch auf nichts gerichtet war, wird
    es nur eine Nuance heller.'
  SeiBed Aux (Licht_in aRaum)
  Bed /(aObj fest immobil) und /(aObj Deko)
    '[Der aObj] schimmer[t] einen Moment lang, aber
    [er] [ist] wohl zu groß und deine Zauberkraft zu
    gering. Der Spruch verpufft.'
  Text 'Ein blendender Blitz zuckt um [den aObj] und
    [er] [fängt/fangen] an zu leuchten. Die Intensität
    lässt rasch nach, aber [der aObj] [gibt/geben] nun
    eine ganz brauchbare Lichtquelle ab.'
  AttrHin aObj Licht
  Wenn /(Aux) dann
    Absatz
    Ausf Lage
  Ende
EndeAusf

Obj     frotz_Spruch (Spruch)
Name    'Frotz-Spruch' m
Vor     'frotz'
subst   'frotz' m  'spruch' m  'zauber' m
Ort     in Zauberbuch
Text    'frotz: [+8]Macht, dass ein Gegenstand Licht
        spendet.'

(Dieser Spruch steht bereits im Zauberbuch, daher wird keine Schriftrolle benötigt.)

Ob ein Spruch gelernt wurde oder nicht muss in der Aktion Vorher abgefragt werden. Das ist nicht ganz elegant, da jeder neu hinzugefügte Zauberspruch hier explizit nachgetragen werden muss, aber es funktioniert:

Flagge  Spruch_gecheckt

Aktion  Vorher
Ausf
  Jenach aBef
    (frotz)     sei benutzter_Spruch frotz_Spruch
    (gnusto)    sei benutzter_Spruch gnusto_Spruch
    (rezrov)    sei benutzter_Spruch rezrov_Spruch
    |... hier weitere Sprüche einfügen ...|
    (sonst)     sei benutzter_Spruch 0
  Ende

  |... hier steht der eigentliche Code ...|
EndeAusf

Und zu guter Letzt gibt es noch den Befehl lernen sowie den Meta-Befehl Sprüche, der die gelernten Zauber auflistet.

Wer sein Schwert-und-Magie-Opus lieber in Inform schreiben möchte, schaut sich am besten den Quellcode von Graham Nelsons Balances [2] [3] an, der im GMD-Archiv erhältlich ist.

Referenzen:
[1] Im Bannkreis, TAG-Spieldatei
[2] Balances, z5-Spieldatei
[3] Quelltext zu Balances

02.09.2001, Martin Oehm

 
[nach oben]