Pisanie zestawów zasad Game Mode

Zestaw zasad mówi trybowi Game Mode, jak działa system stołowy: jakie kości rzuca test, co znajduje się w arkuszu postaci, jakie zasoby są wydawane i co odnawia odpoczynek. Napisz własny, żeby przenieść swój system do trybu Game Mode i udostępnić go innym. Jeśli chcesz grać z zestawem zasad przygotowanym przez kogoś innego, zobacz przewodnik Game Mode: gra z zestawem zasad.

Zestaw zasad to jeden plik JSON. Zawiera dane, nie kod, więc nic się w nim nie wykonuje, a import nie może zaszkodzić twojemu komputerowi. Zanim zaimportujesz cudzy plik, przeczytaj tekst mistrza gry, bo ten tekst trafia do modelu w każdej grze, która używa tego zestawu zasad.

Tworzenie zestawu zasad

  1. Skopiuj przykładowy plik pasujący do sposobu rzucania w twoim systemie:
  1. Zmień id na własne. Identyfikator zawiera małe litery, cyfry i pojedyncze łączniki, np. ember-roads.
  2. Otwórz kopię w edytorze tekstu, takim jak Notatnik albo VS Code, i zapisz ją z końcówką .json. Najpierw zmień name, potem nazwy atrybutów w sheet, a następnie rests i tekst gm. Sekcja Części pliku wymienia każdy klucz, a sekcja Strony referencyjne zawiera linki do stron, które je objaśniają.
  3. Zaimportuj plik (zobacz Wypróbowanie zestawu zasad). Import sprawdza cały plik i wskazuje błędy wiersz po wierszu, zanim cokolwiek zapisze.
  4. Utwórz nową grę (zobacz Game Mode: pierwsze kroki), wybierz swój zestaw zasad w Rules (zasady) i wykonaj kilka testów.

Jeśli to nie zadziała, zobacz sekcję Rozwiązywanie problemów.

Aby edytor pomagał ci podczas pisania, dodaj tę linię jako pierwszą wewnątrz zewnętrznych klamer pliku. Wskazuje ona edytorowi JSON Schema:

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

Schemat wyłapuje błędne nazwy kluczy i niewłaściwe typy. Nie sprawdza, czy nazwy wskazują istniejące rzeczy, np. czy atrybut podany przez umiejętność istnieje. Robi to import. Do dowolnego obiektu możesz dodać linię "$comment": "..." z notatką dla siebie. Engine ją ignoruje.

Co zestaw zasad może, a czego nie może

Zestaw zasad uzupełnia luki w mechanice, którą Engine już zna. Engine zna pięć sposobów rozstrzygania testu, a twój plik wybiera jeden przez resolution.kind:

Wszystkie pięć rodzajów dokładnie opisuje sekcja Rodzaje rozstrzygania.

Mechaniki, która nie pasuje do tych postaci, np. przeciwstawnych pul, nie da się zapisać w pliku zestawu zasad. Potrzebuje ona nowego rodzaju rozstrzygania wewnątrz Engine, czyli wkładu w kod z testami. Jeśli twój system go potrzebuje, zgłoś prośbę o funkcję w repozytorium Engine i opisz mechanikę kilkoma w pełni rozpisanymi rzutami. Te rzuty staną się testami.

Game Mode rozstrzyga walkę albo własnym systemem walki Marinara, albo według zasad twojego zestawu. Opcjonalny blok battle przekazuje walce Marinara liczby z arkuszy postaci: zobacz Bitwy. Opcjonalny blok combat określa, jak zestaw zasad sam rozstrzyga walkę: zobacz Walka. Ustawienie Combat Preference (preferowany rodzaj walki) gry wybiera prezentację Classic lub, gdy zestaw zasad definiuje odległość, pole bitwy Tactical. Zestaw zasad może ograniczyć, których z nich używają jego gry, przez combat.styles (zobacz Które style może wykorzystywać gra).

Części pliku

KluczZawartość
schemaVersionZawsze 1.
id, versionNazwa zestawu dla Engine i liczba całkowita zwiększana przy każdej publikacji zmian.
nameTo, co gracze widzą w kreatorze konfiguracji.
editionOpcjonalne. Jedna linia określająca wydanie lub szkic.
licenseOpcjonalne. Identyfikator SPDX i wymagany przez źródło tekst uznania autorstwa.
coverageZakres zestawu i jednoliniowy opis widoczny w kreatorze konfiguracji.
resolutionSposób rzutu testu lub rzutu obronnego.
sheetCała zawartość arkusza postaci.
restsCo odnawia i usuwa każdy rodzaj odpoczynku.
gmTekst dla modelu mistrza gry i wartości arkusza, które widzi on dla każdej postaci.
catalogsOpcjonalne. Gotowe wpisy oferowane przez edytor arkusza, aby gracze nie przepisywali długich list.
itemsOpcjonalne. Słowa, którymi opisuje się twoje przedmioty: kategorie, rzadkości, statystyki, miejsca, pieniądze.
battleOpcjonalne. Dane, które bitwa może odczytać z arkusza i zapisać po zakończeniu.
combatOpcjonalne. Sposób rozstrzygania walki według własnych zasad i to, co pokazuje ekran bitwy.
layersOpcjonalne. Warianty zestawu włączane przez gracza przy tworzeniu gry.

Plik może mieć do 512 KB (256 KB przed Capability API 1.340). Tekst trafiający do promptu (nazwy, etykiety, tekst mistrza gry) nie może zawierać nowych linii, nawiasów kwadratowych ani podwójnych klamer.

Identyfikatory w arkuszu (atrybutów, umiejętności, pól, pul itd.) zaczynają się literą i zawierają małe litery, cyfry oraz podkreślenia, np. grit_max.

Strony referencyjne

Ta strona opisuje tworzenie, wypróbowanie i udostępnianie zestawu zasad. Każda z pozostałych stron omawia jeden temat:

Wypróbowanie zestawu zasad

Zanim zaczniesz, włącz Allow custom Agent imports (zezwolenie na import własnych agentów) w Settings → Advanced → Danger Zone (ustawienia, zaawansowane, strefa zagrożenia). Importowane zestawy zasad używają tego samego przełącznika bezpieczeństwa co importowani agenci, więc jest on wyłączony, dopóki go nie włączysz. Import wymaga też dostępu przez localhost albo sekretu administratora: Settings → Advanced → Admin Access (ustawienia, zaawansowane, dostęp administracyjny).

  1. Otwórz panel Agents (agenci) i wybierz przycisk Import agents (import agentów, ikona pobierania w rzędzie przycisków u góry panelu).
  2. Wybierz Game Mode ruleset (zestaw zasad trybu Game Mode) i swój plik JSON albo plik pakietu zestawu zasad z końcówką .ruleset.json (zobacz Udostępnianie zestawu zasad).
  3. Przeczytaj podgląd. Pokazuje nazwę, wersję, licencję, zakres zestawu zasad i tekst mistrza gry. Wybierz Import (import).

Twój zestaw zasad pojawi się w sekcji Rules panelu oraz w wyborze Rules kreatora konfiguracji nowych gier. Zestaw zasad zaimportowany z pliku jest zapisywany jako local/<your id>, więc nigdy nie zostanie pomylony z oficjalnym zestawem zasad ani z cudzym.

Zmiana już zaimportowanego zestawu zasad

Zaimportowana wersja nigdy nie jest nadpisywana. Jeśli zaimportujesz zmieniony plik z tym samym version, import zostanie odrzucony z prośbą o zwiększenie numeru. Gra jest związana z dokładną wersją, na której ją utworzono, więc trwająca kampania nigdy nie zmienia swojej matematyki.

Podczas tworzenia cykl wygląda tak: edytuj, zwiększ version, zaimportuj, rozpocznij nową grę. Stare wersje pozostają zainstalowane obok nowej, dopóki nie usuniesz zestawu zasad z sekcji Rules. Usunięcie zestawu zasad, którego gra nadal używa, sprawia, że ta gra zgłasza jego brak aż do ponownego importu.

Jeśli zmienisz kształt arkusza (dodasz, usuniesz lub zmienisz nazwy elementów), zwiększ też sheet.version. Istniejące arkusze są odczytywane tolerancyjnie: wartości nieznane nowemu arkuszowi zostają zachowane, a brakujące otrzymują wartości domyślne.

Udostępnianie zestawu zasad

Zestaw zasad można udostępnić na pięć sposobów.

Jako plik

Wyślij plik JSON znajomemu. Zaimportuje go tak samo jak ty.

Jako plik pakietu

Zestaw zasad zbyt duży na jeden plik, z katalogami we własnych plikach, przenosi się jako jeden zwykły plik JSON o nazwie <name>.ruleset.json. Zawiera manifest pakietu i dokumenty zestawu zasad, każdy zapisany w base64 (sposobie zapisania pliku jako zwykłego tekstu):

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

Manifest wymienia ruleset.json i każdy catalogs/<id>.json w contributions.assets.paths oraz w files, z rozmiarem i sha256 (odciskiem pliku) każdego z nich. Tworzy go edytor zestawów zasad, np. Pixelforge. Import agents → Game Mode ruleset przyjmuje plik i pokazuje ten sam podgląd co dla pliku zestawu zasad, z każdym katalogiem i liczbą jego wpisów.

Plik jest odczytywany jako dane i nigdy nie jest instalowany jako pakiet. Nic w nim nie jest skompresowane, więc nigdy nie zawiera więcej niż własny rozmiar. Limity:

Plik zostaje odrzucony, z podaniem powodu, jeśli:

Przez oficjalny katalog agentów

Zestaw zasad opublikowany w katalogu to plik pakietu zestawu zasad dokładnie w tej postaci, <id>.ruleset.json, nigdy archiwum zip pakietu. Jego manifest deklaruje Capability API 1.374 lub nowsze, więc starszy Engine nigdy nie otrzymuje takiej oferty. Engine odczytuje go tym samym mechanizmem i sprawdza tak samo jak importowany plik pakietu, weryfikuje jego zgodność z manifestem wymienionym w katalogu i instaluje go jak każdy pakiet z katalogu. Zestaw zasad z katalogu, którego artefaktem jest archiwum zip, zostaje odrzucony przed pobraniem czegokolwiek; już zainstalowane zestawy zasad nadal działają.

Z repozytorium GitHub

Jeśli przechowujesz pracę w publicznym repozytorium w serwisie GitHub, umieść każdy zestaw zasad w folderze rulesets w głównym katalogu repozytorium, po jednym pliku na zestaw:

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

Użytkownik dodaje twoje repozytorium raz, przegląda jego zawartość i później je synchronizuje, żeby otrzymać nowe wersje. Lista własnych repozytoriów to zaawansowana funkcja. Osoba prowadząca serwer włącza ją przez ENABLE_CUSTOM_AGENT_REPOS=true, a potem otwiera Agents → Agent Organizer → Custom Sources (agenci, organizowanie agentów, własne źródła). Zestawy zasad z repozytorium są zapisywane pod nazwą właściciela repozytorium, np. alice/ember-roads, więc dwie różne osoby mogą opublikować zestaw zasad o nazwie v20 bez kolizji.

Obowiązują dwa limity. Repozytorium może zawierać najwyżej 32 pliki JSON bezpośrednio w rulesets, a repozytorium z większą liczbą plików zostaje odrzucone. Konto o nazwie local nie może publikować zestawów zasad, ponieważ local/ jest zarezerwowane dla zestawów zasad zaimportowanych z pliku.

W oficjalnym katalogu

Popularny system z jasną licencją może być oferowany wszystkim przez Agent Organizer. Aby go zaproponować, otwórz pull request do repozytorium Marinara-Agents. Układ można sprawdzić w tamtejszym pakiecie ruleset-5e-2014.

Licencjonowanie

Publikuj tylko tekst zasad, który masz prawo udostępniać. Wiele systemów publikuje dokument referencyjny na otwartej licencji i właśnie z niego można kopiować. W license umieść identyfikator licencji (identyfikator SPDX, czyli krótką standardową nazwę, np. CC-BY-4.0) oraz wymagany przez nią tekst uznania autorstwa. Nie kopiuj tekstu z podręczników bez otwartej licencji. Zestaw zasad potrzebuje głównie nazw i liczb. Tekst mistrza gry napisz własnymi słowami.

Rozwiązywanie problemów