Projekt:Adventure 2.0/Autoren-Handbuch/Scripting-Anleitung

aus Kamelopedia, der wüsten Enzyklopädie
Zur Navigation springen Zur Suche springen

Achtung: Das alles hier ist noch in der Berta-Phase und daher sind noch bestimmt so einige Bugs in dem ganzen Ding drin. Mach dir einfach nichts draus. Das folgende sollte zumindest grob aber schon funktionieren, mit Ausnahme der mit Sternchen (*) gekennzeichneten Dinge, die noch implementiert werden müssen. Bei Fragen oder Problemen am besten an Kamel:J* wenden.


Im Adventure2 gibt es 2 Arten von Unterseiten: Die Spielseiten und die Item-Seiten:

Spiel- und Item-Seiten

Die Spielseiten werden (mehr oder weniger fortlaufend) durchnummeriert. Jede Spielseite beginnt mit dem Bild der aktuellen Spielsituation (550x300 Pixel). Mit der imagemap-Extension können da drin auch gleich Bereiche definiert werden, mit denen man später irgendwas anstellen können soll. Dabei werden einfach die Links so gesetzt, dass sie nicht auf eine Wikiseite zeigen, sondern stattdessen mit "#" beginnen, gefolgt von irgendeinem Bezeichner. Wie auch sonst fast für alles, sind als einzige Zeichen für den Bezeichner die Kleinbuchstaben und der Unterstrich erlaubt.

Ein guter Online-Editor für das Zeug ist [1]. Den Code findet man dann unten auf der Seite (ganz einfach bei "Code" aufklappen - ich habs da zuerst übersehen).

Die Itemseiten heißen einfach "item/" gefolgt vom Namen des Items in Kleinbuchstaben. Auch auf die Itemseite gehört ein Bild (50x50 Pixel) - es sei denn es handelt sich nicht um ein nicht materielles Item, sondern um eine Eigenschaft, einen Zustand, etc. Das Bild muss unbedingt entlinkt werden (link=-Parameter).

Auf beiden Seitenarten können hinter dem Bild Ereignisse (sog. Events) festgelegt werden, die steuern, wie sich der Spieler durch's Adventure bewegen kann. Ereignisse sollten immer auf der Seite platziert werden, zu der sie gehören. Ereignisse auf Spielseiten können nur aufgerufen werden, wenn der Spieler sich auf der entsprechenden Seite befindet, Ereignisse auf Itemseiten nur dann, wenn der Spieler das Item besitzt.

Ereignisse

Die Ereignisse Werden mit der Vorlage:A2Event eingebunden. Da hinein kommt dann der Text für die Ereignis-Definition in der extra dafür entwickelten Mini-Programmiersprache A2l. Beim Drücken auf Vorschau und nach dem Abspeichern wird der Programmcode auf der entsprechenden Spiel- oder Itemseite ausgegeben. Wenn alles geklappt hat, steht dort der Code genau so wie er eingegeben wurde. Wenn etwas schief gegangen ist, fügt der Parser hinter das "end." eine zusätzliche Zeile mit der Fehlerbeschreibung an.

Programmierung in A2l

Das Grundgerüst eines Ereignisses sieht etwa so aus:

event [name];
  in <scope>;
  on <trigger>;
 [if <condition>;]
 [do <action>;]
  end.

Die spitzen und eckigen Klammern gehören nicht wirklich da hin: die spitzen (<>) signalisieren einen Platzhalter, die eckigen ([]) bedeuten, dass der Inhalt darin auch weggelassen werden kann, wenn er nicht gebraucht wird.

Event-Name

Man darf jedem Event einen Namen geben. Das ist vor allem nützlich, um anderen sagen zu können, um welches Event es geht, oder für die Fehlersuche. Der Eventname darf aus beliebigen Kleinbuchstaben und Unterstrichen bestehen.

Scope

Der Scope beschreibt noch einmal, in welchem Kontext das Ereignis auftritt. Auf Spielseiten sollte hier page <nummer> stehen, auf Itemseiten item <itemname>, wobei die Platzhalter natürlich zu ersetzen sind.

Trigger

Es können ein oder mehrere Trigger definiert werden, die festlegen, was der Auslöser für das Ereignis sein soll. Möglich sind dabei:

  • enter(<page>) (ausgelöst beim Betreten einer Seite)
  • leave(<page>) (ausgelöst vor dem Verlassen einer Seite - Vorsicht, vielleicht noch mit Nebeneffekten verbunden)
  • click(<region>) (ausgelöst beim Klicken auf eine Region auf der Spielseite (hier ohne das "#"-Zeichen))
  • activate(<item>) (ausgelöst beim Klicken auf ein Item)
  • combine(<item1>, <item2>) (ausgelöst, wenn Item1 auf Item2 gezogen wird (drag&drop). Hier ist es oft sinnvoll auch combine(<item2>, <item1>) zu verwenden, so dass man auch mit dem anderen Item anfangen kann)
  • apply(<item>, <region>) (ausgelöst, wenn das Item auf eine Bildregion gezogen wird)

Die Platzhalter sind durch die Namen der Items/Seiten/Regionen zu ersetzen.

  • add(<item>)*
  • remove(<item>)*

Es können auch mehrere Trigger, per Komma getrennt, angegeben werden; das Ereignis tritt dann bei jedem der Trigger ein.

Condition

Manchmal sollen bestimmte Voraussetzungen erfüllt sein, damit das Ereignis auch tatsächlich durch den Trigger ausgelöst wird. Das können sein:

  • page(<page>) (der Spieler muss sich auf der entspr. Seite aufhalten)
  • have(<item>) (der Spieler hat das entspr. Item)
  • any(...) (wahr wenn irgendeine der durch Komma getrennten Bedingungen wahr ist)
  • all(...) (wahr wenn alle der durch Komma getrennten Bedingungen wahr sind)
  • not(...) (wahr wenn die Bedingung innen falsch ist und anders herum)

Wenn keine Bedingung gebraucht wird, kann sie weggelassen werden.

Action

Das was dann passieren soll, wird durch eine oder mehrere, mit Komma getrennte, Aktionen angegeben:

  • goto(<page>) (auf eine andere Spielseite wechseln)
  • add(<item>) (ein Item hinzufügen)
  • remove(<item>) (ein Item entfernen)
  • print("<text>") oder print('<text>') (Text ausgeben)
  • die("<text>") oder die('<text>') (Text ausgeben und sterben)*

Die Aktion kann weggelassen werden, was allerdings nicht so richtig viel Sinn macht (dann lieber weg mit dem ganzen Ereignis).