![]() |
||
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. |
|
|