Wie Befehle geschrieben werden

Liste der verfügbaren Befehle:

Befehlsliste detailliert (jeder Befehl ausführlich beschrieben) (als RTF-Datei)
Befehlsliste tabellarisch (alle Befehle in präziser, tabellarischer Form)

Interaktive Web-Formulare zur Befehlsabgabe (Aktivierung durch Spielleiter vorher nötig)
Ein Beispiel eines Befehlsskripts


Eine allgemeine Erklärung, wie man Befehle schreibt:

Um einen Spielzug zu erstellen, must du folgendes tun:

  • Verwende das interaktive Web-Formular, oder:
  • Erstelle einen Befehlsskript mit der GPU oder einem Editor und sende es per E-mail (turn#cjgames.com) an uns.

  1. Befehlsdatei
  2. Spieler versenden ihre Befehlsskripte für Mysticora im einfachen Text-Format (ASCII), wobei jeder Befehl in eine separate Zeile geschrieben wird.
    Der Befehlstext kann innerhalb einer E-Mail, oder als angefügte Textdatei übermittelt werden. Wenn eine Text-Datei angefügt ist, muss diese eine ".TXT", ".ASC" oder ".MYS" Datei sein. Falls es keine dieser Dateitypen ist, wird die Datei ignoriert. Der Dateiname ist nicht relevant, d.h. es könnte beispielsweise "MeinZug.TXT" sein. Die Befehlsdateien, die von der GPU generiert werden, sind auch nur Textdateien.

    Diese E-mail wird an folgende Adresse gesandt: turn#cjgames.com mit der Betreffzeile: Mysticora game #'Spielnummer'

    Die Betreff-Zeile des E-Mails sollte die Spielnummer beinhalten, z.B. "Mysticora Spiel #1".
    Es ist auch möglich, den jeweiligen Zug anzugeben. Dies muss hinter der Spielnummer stehen und mit mindestens einem Leerzeichen getrennt sein, z.B. "Mysticora Spiel #1 Zug #27".
    Beachtet bitte, dass - aus Sicherheitsgründen und als Schutz gegen Spams - ihr immer eure Standard-EMail-Adresse, wie sie bei CJ Games registriert ist, verwendet; andere Adressen werden nicht akzeptiert. Es ist möglich, zwei Standard-Adressen bei CJ Games registrieren zu lassen.

    Wenn ein Spieler ein mehrere E-Mails für einen anstehenden Zug abgibt, dann wird nur der zuletzt abgeschicke zur Auswertung verwendet. Damit ist es dem Spieler möglich, einen Zug zu korrigieren, indem er einfach seine Befehle überarbeitet und nochmals vor dem nächsten Zugabgabetermin einsendet.

  3. Befehlsskript Einklammerung
  4. Des Skript, das eingeschickt wird, muss mit dem Start-Befehl "beginne_mys" und dem End-Befehl "beende_mys" eingeklammert sein. Der Start-Befehl beinhaltet zudem die notwendigen persönlichen Angaben zur Autorisierung. Keine anderen Befehle dürfen in diesen beiden Zeilen stehen.

    Beispiel:

    beginne_mys(1, 734, "Hans Musterman", 582, "mysecret")
    ....
    beende_mys()

    Alle Texte, die vor oder hinter diesen Schlüsselbefehlen stehen, werden vom Programm ignoriert.

  5. Befehlsname und Parameter
  6. Fast alle Spielerbefehle haben folgende Struktur:

    <Befehlsname>(<Datum>,<Wiederholversuche>,<Parameter1>,<Parameter2>, ... )

    Wennn die Parameter für die Anzahl der Wiederholversuche und das Spieldatum weggelassen werden, wird das Programm die "Default-Werte" benutzen. Der Wert für ein fehlendes Datum wird normalerweise durch das set-command festgelegt. Einige Befehle können beliebig oft wiederholt werden, wobei - wenn der "Defaultt-Wert" 0 ist - der Befehl nur einmal ausgeführt wird.
    Dies würde dann eine solche Struktur haben:

    <Befehlsname>(<Datum>,<Wiederholungsversuche>,<Wiederholungen>,<Parameter1>,<Parameter2>, ... )

    Ein Charakter-Befehl würde oftmals folgendes Format haben:

    <Befehlsname>(<Datum>, <Wiederholungsversuche>, <Tage damit verbracht>, <Charaktername>, <Parameter2>, ...)

    Der "Tage damit verbracht"-Parameter bedeutet, wie viele Tage (bis zu 30 Tage) der Charakter damit zugebracht hat, die Handlung auszuführen (z.B. Training, auf einen Meuchelmord vorbereiten, Zaubern, etc.).
    (beachte auch, daß Befehlsnamen niemals Leerzeichen beinhalten, nur Buchstaben, und das "Underscore"-Zeichen; auch wird bei den Buchstaben nicht zwischen Groß- und Kleinschreibung unterschieden)

    Anmerkung: Zeit, d.h. die Anzahl von Tagen, ist der entscheidende Faktor ist, der die Anzahl von Aktionen begrenzt, die du durchführen lassen kannst. Für jede Runde stehen dir eine begrenzte Anzahl von Tagen (z.B. 5 Tage im Probespiel, normalerweise 15 Tage im kommerziellen Spiel) zur Verfügung, um Befehle ausführen zu lassen.

  7. Abkürzungen
  8. Für jeden Befehlsnamen gibt es eine Abkürzungsformel, die aus bis zu vier Buchstaben besteht. Bei Zugbefehlen können sowohl die Abkürzungen, als auch die lange Form des Befehls benutzt werden.

    Beispiel:

    erforsche_Verlies(...)

    kann abgekürzt werden als:

    ERVE(...)

  9. Compilerzeit Parameter
  10. Die Syntax für die gebräuchlichsten ersten drei Parameter eines Befehls ist standardisiert. Diese Parameter stellen unter anderem die Compilerzeit-Parameter dar, da sie in dem Moment eingelesen werden, wenn der Zugbefehl via E-Mail eintrifft (dies kann sehr viel früher sein, als der Zug tatsächlich ausgeführt wird).
    Diese werden genannt:

    Datum - Das Spielwelt-Datum, an dem der Befehl ausgeführt werden soll. Das "Default-Datum" kann mit dem Befehl setze_Datum festgelegt werden. Wenn kein Datum durch den setze_Datum Befehl festgelegt ist, wird der Befehl an dem frühst möglichen Datum ausgeführt. Wenn der Spieler ein speziell festgelegtes Datum wünscht, dann sollte eine Paramter-Folge wie folgt eingegeben werden:

    <Tag Nummer>.<Monat Nummer>.<Jahr Nummer> oder:
    <Tag Nummer>.<Monatsname>.<Jahr Nummer>
    (anstelle des Punktes zwischen den Parametern kann auch ein Slash "/", ein Bindestrich "-", oder ein Doppelpunkt ":" verwendet werden)
    Beispiel:

    "2.1.501", "02.01.501", "2:1:501", "2-Frost-501", "02/Frost/501" Spieler können auch ein relatives Datum angeben. Diese Nummer wird dann als die Anzahl der Tage, die nach dem Default-Datum vergehen, gewertet und dieses Datum wird dann das Datum sein, an dem der Befehl ausgeführt wird.

    Jedes Szenario wird seinen eigenen Kalender mit seinen eigenen Tagen, Monaten und Jahren haben. Hier eine Darstellung des Kalenders des ersten Mysticora-Szenarios.

    Wiederholversuche - Wenn der Befehl fehlschlägt, ist dies die Anzahl der später folgenden Versuche, den Befehl doch noch auszuführen. Beachte, dass pro Tag nur ein Versuch möglich ist. Wenn ein Befehl wegen Zeitmangel fehlschlägt, dann wird dies zu der Anzahl gescheiterter Wiederholversuche hinzugezählt, allerdings wird dann nicht auf 0 runtergezählt. Das heisst, dass ein Befehl niemals aufgrund von Zeitmangel komplett gestrichen werden wird.

    Wiederholungen - Wenn der Befehl erfolgreich ausgeführt wurde, ist dies die Anzahl, wie oft der Befehl zusätzlich (erfolgreich) ausgeführt werden soll. Man beachte, dass pro Tag nur ein Versuch möglich ist.

    Folgende Syntax wird verwendet:

    <Befehlsname>([Datum,[Wiederholgungsversuche,[Wiederholungen,]]]Param1,Param2,...)

    (Achtung: mit eckige Klammern werden immer Teile eines Befehls dargestellt, die auch weggelassern werden können)

    WICHTIG:
    Die ersten drei Kompilierzeitparameter können weggelasssen werden (oder teilweise: zuerst können die Wiederholungen weggelassen werden, dann die Wiederholversuche, dann das Datum). Allerdings wird in diesem Fall das Programm nur das erste Parameter (z.B. Parameter1) erkennen, wenn es eine Befehlsfolge ist. Das bedeutet, dass das Parameter mit Anführungsstrichen markiert sein muss!


    NICHT VERGESSEN:
    Wenn eine einfache Zahl für Parameter1 gebraucht wird, wird das Programm dies als eine der ersten drei Kompilierzeitparameter erkennen, wenn sie nicht erst an vierter Stelle auftaucht!

    Hier ist ein Beispiel, in dem die Kompilierzeitparameter nicht weggelassen wurden:

    stehle("1-1-500",3,2,"Mathilda","Heinz",1,1,1)

    und hier drei Beispiele, in denen die Kompilierzeitparameter wegelassen wurden:

    stehle(,,,"Mathilda","Heinz",1,1,1)
    stehle("Mathilda","Heinz",1,1,1)
    stehle("2","Heinz",1,1,1) (Achtung: Mathilda hat die ID-Nr 2)

    Während alle Befehle ein Datums- und ein Wiederholversuchsparameter haben, können einige Befehle keine Wiederholungsparameter haben. Dies kommt häufig bei solchen Befehlen vor, bei denen eine Wiederholung bei einem schon geglückten Versuch unsinnig ist (z.B. es ist nicht möglich, einen erfolgreichen Meuchelmord zu wiederholen, da das Opfer schon tot ist).

  11. Spielbestandteil Parameter
  12. Viele Befehls-Parameter werden auf Spielkomponenten verweisen, z.B. ein Charakter, eine Siedlung. Dies kann entweder mit einer ID Nummer, die jedes Komponent/Objekt besitzt, oder mit seinem Namen geschehen. Die Befehle erlauben auch verschiedene Spielobjekte als Parameter. Wenn ein Spieler nicht spezifiziert, auf welchen Spielobjekt-Typ der Befehl verweist, dann wird das Programm automatisch nach möglichen (sinnvollen) Typen suchen. Diese Suche startet immer bei einem bestimmte Typ, der vom jeweiligen Befehl abhängt.
    Beispiel: Der Bewegungsbefehl bezieht sich zuerst auf eine Gruppe. Der Default-Typ ist Gruppe. Wenn ein Spieler nun nur "123" als ID Nummer für die Spielobjekt angibt, dann wird das Programm zunächst suchen, ob es eine Gruppe #123 gibt. Wenn ein Spieler Charakter #123 bewegen will, obwohl es ebenfalls eine Gruppe #123 gibt, dann muss im Befehl "c#123" angegeben werden.
    Dies sind alle Varianten, wie man mit Parametern auf ein Spielobjekt verweisen kann:

    "<Typen Code>#<ID>" or: "<Typen Code>#<Name>"
    or:
    "#<ID>"
    or:
    "#<Name>"
    or:
    "<Name>"
    or:
    <Nr.>

    Beispiele, wie man auf den Charakter John Little, das die Nr. 123 hat, verweist:

    "c#123"
    "c#John"
    "#123"
    "#John"
    "John"
    123
    Codes der verschiedenen Spielobjekttypen
    Typcode Spielobjekttyp
    c Charakter
    gd Gebäude
    g Gruppe
    s Siedlung

    Bemerkung zu Charakternamen:
    Wenn mit einer Namensangabe auf ein Charakter verwiesen wird, kann entweder der Vorname oder der Vorname mit dem Nachnamen - getrennt durch ein Leerzeichen - verwendet werden. Der Nachname wird nur dann gebraucht, wenn Mehrdeutigkeiten möglich sind (z.B. wenn der Spieler mehrere Charaktere kontrolliert, die den gleichen Vornamen haben).
    Ebenso ist es wenig ratsam, wenn auf ein Charakter verwiesen werden soll, das nicht zur Spieleraufstellung gehört, nur den Vornamen zu verwenden. Die Wahrscheinlichkeit, dass ein anderer Charakter mit dem gleichen Namen in der Spielwelt existiert, ist sehr hoch. Hier sollte, um sicher zu gehen, immer die ID-Nr. verwendet werden.

  13. Befehlskonstanten
  14. Befehlskonstanten müssen von einem einzelen Dollarzeichen "$" eingeleitet werden. Ansonsten enthalten Befehlskonstanten nur Buchstaben.

    Beispiel:

    Anstelle folgende Zeile zu schreiben:

    setze_Spielparameter ( -1 )

    könnte ein Spieler auch schreiben:

    setze_Spielparameter ( $JA ) Tabelle der Befehlskonstanten

  15. Zahlen
  16. Parameter, die eine Zahl sind, können, so lange sie nur aus Ziffern (und dem Minus-Zeichen) bestehen, ohne Anführungsstriche angegeben werden. Eine Dezimalstelle wird immer mit einem Punkt angegeben (auch wenn das so unüblich für das Deutsche ist). Prozentzahlen können beispielsweise auch als "12%" dargestellt werden; diese wird dann zu 0.12 konvertiert.
    Achtung: In solchen Fällen müssen Anführungsstriche verwednet werden.

  17. Kommentare
  18. Kommentare können in eine Befehlsdatei mit einem Semikolon eingefügt werden(";"). Alles, was rechts vom Semicolon steht, wird vom Programm ignoriert.

    Beispiel:

    Zauberspruch(, 1, "Dr Doom", "zal-bel-zal-gogth-nixfor") ; warum hat das das letzte mal nicht funktioniert?

  19. Funktionswerte
  20. Parameter könne ebenfalls mit arithmetischen Ausdrücken versehen werden. Diese Werte werden (normalerweise) zur Ausführungszeit berechnet.

    Ein Beispiel für eine solche Funktion ist die "Befehl_erfolgreich" Funktion:

  21. Bedingungen
  22. Spieler können "wenn"-Sätze verwenden, wenn der befehl nur unter bestimmten Bedingeungen ausgeführt werden soll. Das Heißt, der Befehl, der in der selben Zeile steht, wird nur dann ausgeführt, wenn die Funktion oder der Ausdruck zwischen den Schlüsselwörtern "wenn" und dem später folgenden Schlüsselwort "dann" erfüllt ist.
    Beispiel:

    wenn Charakter_Status("Bloodblade", "gefangen?", $JA) dann befreie(, 5, "Shorty Onehand", "Bloodblade", 1, 5)

  23. Listen
  24. Hin und wieder benötigen Befehle so genannte "Listen".
    Diese haben folgende Syntax:

    <Befehlsname>(<Param1>, <Param2>, ..., Liste(<Listen-Element1>,<Listen-Element2>, ...), <ParamX>, <ParamX+1>, ...)

    Diese stellen eine Art "Befehl im Befehl" dar.

  25. Ausführungsdauer
  26. Beim Bedenken der Ausführungszeit für einen Befehl sollte man sich mal kurz überlegen, wie es wäre, wenn du selber gefragt werden würdest diesen Befehl auszuführen? Wie würdest du antworten, wie lange man dir geben müßte.
    Wenn dir immer noch nicht klar ist, wie lange man bräuchte kannst immer noch die Dauer in der Befehlstabelle nachschlagen oder folgende Daumenregel anwenden:

    Nur 1 nicht-trivialen Befehl pro Tag ausgeben.

    Triviale Befehle sind solche, die innerhalb einiger Minuten erledigt werden können. Dazu gehören meist die Organisationsbefehle (wie 'übergebe_Gegenstand' oder 'trete_Gruppe_bei'). Diese Regeln gilt pro ausführendes Spielkomponente (Charakter, Gruppe) natürlich.
    Besondere Anmerkung: Trainingsbefehle sollten mindestens mehrere Tage dauern um effektiv zu sein.


Die allgemeine Ablauf, wie Züge versendet und später wieder erhalten werden:

  1. Spielrunde
  2. Einen Spielrunde in Mysticora besteht aus den Befehlen, die ein Spieler einsendet und der daraufhin von der Mysticorasimulation generierten Auswertung. Am Ende jedes Arbeitstages werden hier bei CJ Games 1-3 Spielwelttage, einschließlich der Verarbeitung der Spielzüge, simuliert. Dies wird normalerweise um 18 Uhr sein (Montags bis Freitags). Wenn eine E-Mail eines Spielers vor 18 Uhr eintrifft, so werden die Befehle mit in die Simulation eingebunden. Normalerweise wird die Simulation am nächsten Tag beendet sein (sie dauert rund 16 Stunden). Es gibt allerdings einen Mindest-Zugabstand: zwischen zwei Zügen eines Spieler muss (normalerweise) eine Woche liegen. Wenn ein Spieler mehr Züge abgibt, dann wird die Auswertung dieser Züge entsprechend verzögert.

    Es bleibt zu beachten, dass die Spieler die Auswertungen ihrer eingesendeten Züge nicht sofort am nächsten Tag empfangen, sondern etwas warten müssen - normalweise eine Woche - bevor sie diese erhalten. Dies ist darauf zurückzuführen, dass jeder eingereichte Befehl an einem bestimmten Spielwelttag ausgeführt wird. Dies kann jeder zukünftige Tag in der Spielwelt sein. Der Spieler muss daher warten, bis dieser Spielwelttag kommt. Jeder Tag wird nämlich individuell simuliert. Dies kann nur an einem Arbeitstag geschehen, da die Auswertungen noch kontrolliert werden müssen. Innerhalb einer normalen Woche werden 5-15 Spielwelttage simuliert.

    Ein Spieler kann individuell wählen, wie seine Zugabfolge aussehen soll. Ein Spieler kann beispielsweise sich dafür entscheiden, dass er die Auswertung Samstag morgens erhält, damit er/sie am Wochenende reichlich Zeit hat, sich die Auswertungen anzuschauen und den neuen Zug auszuarbeiten, ohne dabei Tage in der Spielwelt zu "verlieren" (am Wochenende läuft die Simulation nicht). Am Sonntag abend würde der Spieler dann den Zug absenden. Die Befehle würden dann im Laufe der folgenden Woche simuliert und die Auswertung würde der Spieler dann wieder am Samstag morgen erhalten, usw.

  3. Abfolge/Ablauf eines einzigen Spieltages
  4. Jeder Tag in der Spielwelt wird individuell simuliert. Daher werden zunächst die Spielerbefehle nach ihrem Spieldatum sortiert. Alle Befehle, die länger als ein Tag dauern (normalerweise Bewegungsbefehle) werden dann stückweise über die folgenden Tage verteilt.

    Alle Befehle eines Spielwelttages werden in einer zufälligen Reihenfolge ausgewertet (d.h. es wird zufällige eine Spielerposition ausgewählt, von der ein Befehl simuliert wird, dann wird eine andere Spielerposition gewä, von der ebenfalls ein Befehl simuliert wird, etc.).

    Da Spielzüge mehrere Tage beinhalten (normalerweise 15-30 Tage) werden Spielwelt und reale Welt zeitlich nahezu parallel verlaufen. Für eine Einheit, die von Punkt A nach Punkt B läuft, bedeutet dies auch, dass - wenn die Reise länger als einen Tag dauert - die Einheit jeden Tag einen "Stop" auf der Reiseroute macht. Zu diesem Zweck wird wird der genaue Aufenthaltsort der Einheit innerhalb eines Feldes festgehalten, damit sichergestellt wird, dass für die Bewegung als Ganzes die korrekte Zeit berechnet wird und es zu keinen Fehlern kommt.

  5. Erfolg der Befehle
  6. Spieler in Mysticora sollten sich bewußt sein, dass es ein Befehl, der vom Erfolg vorheriger Befehle abhängt, demzufolge eine höhere Wahrscheinlichkeit hat, dass der Befehl missglückt. Gerade hierin aber liegt sehr viel Potenzial für Spieler, die ihre Züge sorgsam ausarbeiten, da es möglich ist, sehr viele komplexe Dinge in einem einzigen Zug auszuführen. So gibt es beispielsweise bei Mysticora die Möglichkeit, Befehle - wie oben aufgeführt - an bestimmte Bedingungen zu knüpfen (z.B. wenn bestimmte Gegenstände oder Gruppen anwesend sind oder sich an einem bestimmten Ort befinden). Zudem gibt es die Möglichkeit, jedem Befehl ein Parameter zuzuweisen, wie oft der Befehl ausgeführt werden soll, wenn die Ausführung des Befehls vorerst nicht erfolgreich war. Ein Spieler, der sich dieser "Sicherheitsmechanismem" bedient und äußerst komplexe Befehlskombinationen vermeidet, wird in der Lage sein, das Risiko solcher Folgefehler, die aus einem missglückten vorherigen Befehl resultieren, zu minimieren.


Hier mehr zu den Bewegungsregeln

 zurück