Regelsätze für Game Mode schreiben

Ein Regelsatz erklärt Game Mode, wie ein Tischrollenspiel funktioniert: welche Würfel eine Probe wirft, was auf dem Charakterbogen steht, welche Ressourcen verbraucht werden und was eine Rast wiederherstellt. Schreib einen, um dein eigenes System in Game Mode zu bringen und es zu teilen. Wenn du mit einem fremden Regelsatz spielen möchtest, siehe Mit einem Regelsatz spielen.

Ein Regelsatz besteht aus einer JSON-Datei. Sie enthält Daten, keinen Code. Nichts darin wird ausgeführt, und der Import kann deinem Computer nicht schaden. Lies vor dem Import einer fremden Datei den Text für den Game Master, denn er wird in jedem Spiel mit diesem Regelsatz an das Modell gesendet.

Einen Regelsatz anlegen

  1. Kopiere die Beispieldatei, deren Würfelmechanik zu deinem System passt:
  1. Ersetze id durch deine eigene ID. Sie besteht aus Kleinbuchstaben, Ziffern und einzelnen Bindestrichen, etwa ember-roads.
  2. Öffne deine Kopie in einem Texteditor wie Notepad oder VS Code und speichere sie mit der Endung .json. Ändere zuerst name, dann die Namen der Attribute in sheet, danach rests und den Text unter gm. Bestandteile der Datei führt jeden Schlüssel auf, und unter Referenzseiten findest du die Seiten, die sie erklären.
  3. Importiere die Datei (siehe Deinen Regelsatz ausprobieren). Der Import prüft die gesamte Datei und nennt dir Zeile für Zeile die Fehler, bevor er etwas speichert.
  4. Erstelle ein neues Spiel (siehe Game Mode: Erste Schritte), wähle deinen Regelsatz unter Rules (Regeln) und spiele einige Proben.

Wenn es nicht funktioniert hat, siehe Fehlerbehebung.

Damit dein Editor dir beim Schreiben hilft, füge folgende Zeile als erste Zeile innerhalb der äußeren geschweiften Klammern der Datei ein. Sie verweist den Editor auf das JSON-Schema:

"$schema": "https://raw.githubusercontent.com/Pasta-Devs/Marinara-Engine/staging/docs/extending/ruleset.schema.json",

Das Schema erkennt falsch geschriebene Schlüssel und falsche Typen. Es kann nicht prüfen, ob Namen auf vorhandene Dinge verweisen, etwa ob eine Fertigkeit ein existierendes Attribut nennt. Das prüft der Import. Du kannst in jedem Objekt eine Zeile "$comment": "..." als Notiz für dich ergänzen. Die Engine ignoriert sie.

Was ein Regelsatz kann und was nicht

Ein Regelsatz gestaltet eine Mechanik aus, die die Engine bereits kennt. Die Engine kennt fünf Arten, eine Probe aufzulösen, und deine Datei wählt eine davon mit resolution.kind:

Alle fünf werden unter Auflösungsarten vollständig beschrieben.

Eine Mechanik, die in keine dieser Formen passt, etwa vergleichende Pools, lässt sich nicht in einer Regelsatzdatei ausdrücken. Sie braucht eine neue Auflösungsart in der Engine, also einen Codebeitrag mit Tests. Wenn dein System so etwas benötigt, öffne einen Funktionswunsch im Engine-Repository und beschreibe die Mechanik anhand einiger durchgerechneter Würfe. Diese Würfe werden zu den Tests.

Game Mode löst einen Kampf entweder nach den eigenen Kampfregeln von Marinara oder nach den Regeln deines Regelsatzes auf. Ein optionaler battle-Block stellt Marinaras Kampfsystem die Zahlen deiner Charakterbögen bereit; siehe Kämpfe. Ein optionaler combat-Block legt fest, wie der Regelsatz den Kampf selbst auflöst; siehe Kampfregeln. Die Combat Preference (Kampfpräferenz) des Spiels wählt die Darstellung Classic oder, wenn der Regelsatz Entfernungen definiert, ein Schlachtfeld in Tactical. Ein Regelsatz kann mit combat.styles einschränken, welche dieser Stile seine Spiele verwenden (siehe Welche Stile ein Spiel verwenden darf).

Bestandteile der Datei

SchlüsselInhalt
schemaVersionImmer 1.
id, versionDer Name deines Regelsatzes für die Engine und eine ganze Zahl, die du bei jeder veröffentlichten Änderung erhöhst.
nameDer im Einrichtungsassistenten sichtbare Name.
editionOptional. Eine Zeile zur Ausgabe oder zum Entwurf.
licenseOptional. Eine SPDX-ID und der von deiner Quelle verlangte Urheberhinweis.
coverageWas der Regelsatz abdeckt, mit einer einzeiligen Zusammenfassung für den Einrichtungsassistenten.
resolutionWie eine Probe oder ein Rettungswurf gewürfelt wird.
sheetAlles auf dem Charakterbogen.
restsWas jede Art von Rast wiederherstellt und entfernt.
gmDer Text für das Game-Master-Modell und die Bogenwerte, die es für jeden Charakter sieht.
catalogsOptional. Fertige Einträge im Bogeneditor, damit Spieler lange Listen nicht von Hand eingeben müssen.
itemsOptional. Die Begriffe, in denen deine Gegenstände geschrieben sind: Kategorien, Seltenheiten, Werte, Trageplätze, Geld.
battleOptional. Was ein Kampf vom Bogen lesen und danach zurückschreiben darf.
combatOptional. Wie deine eigenen Regeln einen Kampf auflösen und was der Kampfbildschirm anschließend ausspielt.
layersOptional. Varianten deines Regelsatzes, die ein Spieler bei der Spielerstellung einschaltet.

Die Datei darf bis zu 512 KB groß sein (vor Capability API 1.340 waren es 256 KB). Text, der in einem Prompt landet – Namen, Beschriftungen und Game-Master-Text –, darf keine Zeilenumbrüche, eckigen Klammern oder doppelten geschweiften Klammern enthalten.

IDs innerhalb des Bogens, etwa für Attribute, Fertigkeiten, Felder und Pools, bestehen aus Kleinbuchstaben, Ziffern und Unterstrichen und beginnen mit einem Buchstaben, zum Beispiel grit_max.

Referenzseiten

Diese Seite erklärt, wie du einen Regelsatz anlegst, ausprobierst und teilst. Die anderen Seiten behandeln jeweils ein Thema:

Deinen Regelsatz ausprobieren

Bevor du anfängst, schalte Allow custom Agent imports (Import eigener Agenten erlauben) unter Settings → Advanced → Danger Zone (Einstellungen → Erweitert → Gefahrenbereich) ein. Importierte Regelsätze verwenden denselben Sicherheitsschalter wie importierte Agenten, deshalb ist er aus, bis du ihn einschaltest. Der Import braucht außerdem Zugriff über localhost oder das Admin-Secret (Settings → Advanced → Admin Access).

  1. Öffne das Panel Agents und wähle Import agents (Agenten importieren), das Download-Symbol in der Schaltflächenreihe oben im Panel.
  2. Wähle Game Mode ruleset (Regelsatz für Game Mode) und deine JSON-Datei oder eine Regelsatz-Paketdatei mit der Endung .ruleset.json (siehe Deinen Regelsatz teilen).
  3. Lies die Prüfung. Sie zeigt Name, Version, Lizenz, Umfang des Regelsatzes und den Text für den Game Master. Wähle Import (importieren).

Dein Regelsatz erscheint im Bereich Rules des Panels und in der Auswahl Rules des Einrichtungsassistenten für neue Spiele. Ein aus einer Datei importierter Regelsatz wird als local/<your id> abgelegt. Er wird dadurch nie mit einem offiziellen oder fremden Regelsatz verwechselt.

Einen bereits importierten Regelsatz ändern

Eine importierte Version wird niemals überschrieben. Importierst du eine geänderte Datei mit derselben version, wird der Import abgelehnt und fordert eine höhere Nummer. Ein Spiel ist an genau die Version gebunden, mit der es erstellt wurde, deshalb ändert sich die Mathematik einer laufenden Kampagne nie.

Beim Entwerfen lautet die Folge: bearbeiten, version erhöhen, importieren, neues Spiel beginnen. Alte Versionen bleiben neben der neuen installiert, bis du den Regelsatz aus dem Bereich Rules entfernst. Verwendet ein Spiel einen entfernten Regelsatz noch, meldet es ihn als fehlend, bis du ihn erneut importierst.

Änderst du die Form des Bogens durch Hinzufügen, Entfernen oder Umbenennen von Einträgen, erhöhe auch sheet.version. Vorhandene Bögen werden tolerant gelesen: Dem neuen Bogen unbekannte Werte bleiben erhalten, fehlende Werte verwenden ihre Standards.

Deinen Regelsatz teilen

Es gibt fünf Wege, ihn zu teilen.

Als Datei

Schick die JSON-Datei an einen Freund. Er importiert sie genauso wie du.

Als Paketdatei

Ein Regelsatz, der für eine einzelne Datei zu groß ist und Kataloge in eigenen Dateien hat, reist als eine einfache JSON-Datei namens <name>.ruleset.json. Sie enthält das Paketmanifest und die Dokumente des Regelsatzes, jedes als Base64 gespeichert (eine Art, eine Datei als reinen Text zu schreiben):

{
  "format": "marinara-ruleset",
  "version": 1,
  "manifest": { "kind": ["ruleset"], "…": "the package manifest" },
  "files": {
    "ruleset.json": "<base64>",
    "catalogs/spells.json": "<base64>"
  }
}

Das Manifest führt ruleset.json und jedes catalogs/<id>.json in contributions.assets.paths und in files auf, jeweils mit Größe und sha256 (einem Fingerabdruck der Datei). Ein Regelsatz-Editor wie Pixelforge erstellt eine solche Datei. Import agents → Game Mode ruleset nimmt die Datei an und zeigt dieselbe Prüfung wie für eine Regelsatzdatei, mit jedem Katalog und der Zahl seiner Einträge.

Die Datei wird als Daten gelesen und nie als Paket installiert. Nichts darin ist komprimiert, sie enthält also nie mehr als ihre eigene Größe. Grenzen:

Sie wird mit Begründung abgelehnt, wenn:

Über den offiziellen Agentenkatalog

Ein im Katalog veröffentlichter Regelsatz ist eine Regelsatz-Paketdatei genau dieser Form, <id>.ruleset.json, niemals ein Paket-Zip. Sein Manifest deklariert Capability API 1.374 oder neuer, sodass er einer älteren Engine nie angeboten wird. Die Engine liest ihn mit demselben Leseverfahren und denselben Prüfungen wie eine importierte Paketdatei, prüft ihn gegen das vom Katalog aufgeführte Manifest und installiert ihn wie jedes Katalogpaket. Ein Katalogregelsatz, dessen Artefakt ein Zip ist, wird abgelehnt, bevor etwas heruntergeladen wird; bereits installierte Regelsätze funktionieren weiter.

Aus einem GitHub-Repository

Verwahrst du deine Arbeit in einem öffentlichen GitHub-Repository, lege jeden Regelsatz als eigene Datei in einen Ordner rulesets auf dessen oberster Ebene:

your-repository/
  agents.json        (optional, only if you also share agents)
  rulesets/
    ember-roads.json
    another-system.json

Nutzer fügen dein Repository einmal hinzu, prüfen seinen Inhalt und synchronisieren es später, um neue Versionen zu erhalten. Die Liste eigener Repositories ist eine erweiterte Funktion. Wer den Server betreibt, schaltet sie mit ENABLE_CUSTOM_AGENT_REPOS=true ein und öffnet dann Agents → Agent Organizer → Custom Sources (Agenten → Agentenverwaltung → eigene Quellen). Regelsätze aus einem Repository werden unter dem Namen seines Besitzers abgelegt, etwa alice/ember-roads. So können zwei Autoren jeweils einen Regelsatz namens v20 veröffentlichen, ohne einander in die Quere zu kommen.

Es gelten zwei Grenzen. Ein Repository darf höchstens 32 JSON-Dateien direkt in rulesets enthalten; eines mit mehr wird abgelehnt. Ein Konto namens local kann keine Regelsätze veröffentlichen, denn local/ ist für Regelsätze reserviert, die aus einer Datei importiert wurden.

Im offiziellen Katalog

Ein verbreitetes System mit geklärten Lizenzrechten kann über Agent Organizer allen angeboten werden. Um eines vorzuschlagen, öffne einen Pull Request im Repository Marinara-Agents. Das dortige Paket ruleset-5e-2014 zeigt die Verzeichnisstruktur.

Lizenzierung

Veröffentliche nur Regeltexte, die du teilen darfst. Viele Systeme bieten ein Referenzdokument unter einer offenen Lizenz an; daraus darfst du kopieren. Trage unter license die Lizenz-ID (eine SPDX-ID, ein kurzer Standardname wie CC-BY-4.0) und den Urheberhinweis ein, den die Lizenz verlangt. Kopiere keine Texte aus nicht offen lizenzierten Regelbüchern. Ein Regelsatz braucht vor allem Namen und Zahlen. Formuliere den Text für den Game Master selbst.

Fehlerbehebung