← Bonemark

Modding

Inhalte hinzufügen, indem du kleine Textdateien schreibst. Kein Programmieren, kein Compiler. In fünf Teilen: den Mod eines anderen installieren, dein erster Mod, das vorhandene Spiel verändern, eine Referenz mit jeder Familie und jedem Diagnosecode, und damit leben. Die Tabelle dessen, was du bauen kannst, wird aus dem Build gemessen, nicht versprochen.

Benutze Mods

Wo ist der Mods-Ordner?

Öffnen Sie Mods im Hauptmenü. Der Pfad wird oben auf dem Bildschirm angezeigt, daneben befindet sich eine Schaltfläche, die den Ordner in Ihrem Dateimanager öffnet.

Es befindet sich neben Ihren Spielständen und ist derselbe Ordner, unabhängig davon, ob Sie den Mod eines anderen installieren oder Ihren eigenen schreiben. Während das Spiel läuft, wird nichts gelesen, daher spielt es keine Rolle, ob das Spiel geöffnet ist, während Sie Dateien verschieben.

Installieren Sie eins

Ein Mod ist ein Ordner mit mod.json oben. Bei den meisten Downloads handelt es sich um diesen Ordner in einer ZIP-Datei.

1. Extrahieren Sie esDamit befindet sich der Ordner mit mod.json direkt im Mods-Ordner. Eine ZIP-Datei, die nach northern_reach/northern_reach/mod.json extrahiert wird, ist eine Ebene zu tief und wird vom Spiel nicht erkannt.
2. Starten Sie das Spiel neuPakete werden beim Start gelesen. Es gibt keine Hot-Installation.
3. Schalten Sie es einÖffnen Sie Mod und verwenden Sie den Schalter. Ein kopierter Ordner wird gefunden und deaktiviert gelassen: Es wird nichts geladen, wenn er einfach in einem Ordner erscheint.
4. Erneut neu startenIn der Zeile steht Aktiv – zum Laden neu starten, bis Sie es tun. Dann heißt es Geladen.

Ein Mod, in den Sie kopieren, bleibt ausgeschaltet, bis Sie es sagen. Das Spiel lehnt ausführbare Dateien ohne Frage ab, aber ein Datenpaket kann trotzdem Preise, Gegenstände und Personen auf eine Art und Weise ändern, die Sie nicht gewünscht haben, und wenn eines von selbst in einem bereits laufenden Spiel auftaucht, ist das ein Problem, das niemand diagnostizieren möchte. Das Spiel fragt also. Beim ersten Mal ist es ein zusätzlicher Neustart und für dieses Paket nie wieder.

Es gibt keinen Launcher, keine Ladeauftragsdatei zum Bearbeiten und es gibt nichts zum Aufzeichnen. Die Ladereihenfolge ist eine Zahl in jedem Paket, die vom Autor ausgewählt wird.

Starte eine neue Partie für ein Paket, das Personen, Orte oder Quests hinzufügt. Ein bereits laufender Spielstand behält die Welt, mit der er erstellt wurde. Pakete, die nur Zahlen, Bilder oder Farben ändern, sind in einer bereits begonnenen Partie sichtbar. Audio- und Schriftdateien werden geprüft, aber noch keine laufende Paketoberfläche verbraucht sie.

Ist es geladen?

Mod, im Hauptmenü. Jedes gefundene Paket steht in einer Zeile mit einem Ein-Wort-Status: geladen, deaktiviert, ungültig, in Konflikt stehend, erfordert einen anderen Mod, ignoriert.

Ein Mod kann sich auch selbst ausschalten, und es wird angezeigt, warum. Der von Ihnen eingestellte Schalter gilt für das Paket, auf dem Sie ihn abgelegt haben, nicht für seinen Namen im Ordner. Die Mod-IDs werden von den Autoren ausgewählt und es gibt nichts, um sie zu koordinieren, daher sind zwei nicht verwandte Mods, die beide northern_reach heißen, ein gewöhnlicher Zufall – und ohne dies würde der zweite den Schalter des ersten erben. Wenn der Mod unter einer ID nicht der ist, den Sie aktiviert haben, heißt es in der Zeile: Dies ist nicht der Mod, den Sie aktiviert haben. Durch das Aktualisieren eines Mods bleibt Ihr Switch erhalten; Löschen Sie es und kopieren Sie eine andere Nummer.

Wenn Sie der Autor eines Mods sind und diese Zeile auf Ihrem Paket sehen, liegt eine ID-Kollision mit dem Mod einer anderen Person vor. Wählen Sie eine weniger offensichtliche ID.

Bei zwei dieser Worte geht es um einen Neustart, den Sie schulden, nicht um das Paket. Aktiv – zum Laden neu starten bedeutet, dass Sie es eingeschaltet haben und noch niemand es gelesen hat; Aus – zum Herunterladen neu starten bedeutet das Gegenteil und der Inhalt bleibt bis zum Neustart im Spiel. Das sind absichtlich getrennte Wörter: Ein Bildschirm, auf dem „Geladen“ steht, sobald Sie einen Schalter betätigen, würde Sie dazu veranlassen, die Welt nach etwas zu durchsuchen, das noch nicht da ist.

Wenn der Status nicht „geladen“ ist, erfahren Sie in der folgenden Zeile, warum Sie nicht geschrieben haben, in der Sprache, in der Sie spielen, und ohne Bezeichner: welche Datei das Spiel nicht ausführen möchte, welches Paket fehlt, welche Version es möchte. Nachfolgend sehen Sie, was der Inhalt des Pakets bewirkte: Wie viele Einträge wurden eingegeben, wie viele wurden abgelehnt. Details anzeigen öffnet den Rest, d. h. die IDs und die genaue Regel, gegen die jeder abgelehnte Datensatz verstoßen hat.

Auf dem BildschirmIm BerichtWas bedeutet es
GeladenactiveBeladbar, keine Hindernisse.
UngültiginvalidDas Manifest enthält gesperrte Skript- oder ausführbare Dateien.
Erfordert einen anderen Modskipped_missing_dependencyEine deklarierte Abhängigkeit fehlt oder ist deaktiviert.
Erfordert einen anderen Modskipped_incompatible_dependencyEine deklarierte Abhängigkeit liegt außerhalb ihres Bereichs.
IgnoriertincompatibleDer Mod zielt auf eine neuere Version des Spiels ab.
WidersprüchlichconflictZwei ladbare Mods verweisen auf dieselbe Überschreib-ID (sie bleiben ladbar; load_order gewinnt, beide gemeldet).
DeaktiviertdisabledSie haben es ausgeschaltet oder nie eingeschaltet. Die Auswahl der Pakete ist frei: Wenn Sie eines in den Ordner legen, wird es installiert und nicht aktiviert.
Ein – zum Laden neu startenSie haben es eingeschaltet und noch hat es niemand gelesen. Der Inhalt ist erst nach einem Neustart im Spiel.
Aus – zum Herunterladen neu startenSie haben es ausgeschaltet und es ist immer noch aufgeladen. Der Inhalt bleibt bis zum Neustart im Spiel.

Zwei Zeilen teilen sich absichtlich ein Wort: Erfordert einen anderen Mod Für einen Spieler ist es das gleiche Problem, ob das Paket fehlt oder die falsche Version ist, und die Zeile darunter sagt welches. Und wenn zwei Pakete denselben Datensatz beanspruchen, schreibt dasjenige mit dem höchsten load_order zuletzt und gewinnt – aber eine Übernahme, die niemand deklariert hat, ist ein Fehler, keine Notiz. Beide Reihen werden gemeldet, und die Verliererreihe benennt den Gewinner, und der Gewinner wird immer noch berechnet, anstatt dem Zufall überlassen zu werden: Eine Ablehnung muss nicht unbedingt ein Münzwurf sein. Wenn zwei Mods dasselbe wollen erklärt, wie man absichtlich einen Mod deklariert.

„Hochgeladen“ bedeutet immer noch nicht, dass Sie es weltweit sehen können. Lesen Sie dazu die Zählungen unter der Zeile ab, und Jetzt im Spiel finden gibt an, wo welche Art von Dingen auftaucht.

Die Zählungen summieren sich immer. Betten werden angewendet, mehr abgelehnt, mehr durch einen anderen Mod ersetzt, mehr warten auf ihre eigenen Bedingungen – und die letzten beiden werden nominiert, anstatt ein Loch zu bleiben. Ein Datensatz, den ein anderes Paket zuletzt schreibt, wird nicht abgelehnt, weil daran nichts auszusetzen ist, und er wird nicht einmal erzwungen, weil das Spiel das nicht beibehalten hat. Es ist der Unterschied zwischen dem Lesen einer Zeile und dem Verbringen eines Abends mit der Suche nach einem Fehler in einer Datei, die keinen enthält. Details anzeigen zeigt an, welcher Datensatz und welches Paket ihn jetzt hat.

Eine Zahl steht neben dieser Summe und nicht darin: Dateien, die niemand gelesen hat. Eine Datei, deren Familie nicht in content_types enthalten ist, wurde noch nie geöffnet, daher gibt es keinen zu zählenden Datensatz und es gibt keine Möglichkeit zu wissen, wie viele darin enthalten sind. Es handelt sich um eine Zählung von Dateien, nicht von Datensätzen, und genau deshalb kann es kein sechster Term sein: Die Summe beginnt bei read, und diese wurden noch nie gelesen.

Bevor Sie jemanden um Hilfe bitten

Öffnen Sie Mod und klicken Sie auf Bericht kopieren. Fügen Sie alles in Ihre Nachricht ein und sagen Sie dann, was Sie erwartet haben.

Einfacher Text, bereit für ein Forum, eine Discord-Nachricht oder einen Fehlerbericht: der Build, auf dem Sie sich befinden, der Mods-Ordner, jedes Paket mit seiner Version, seine Ladereihenfolge und sein Status, der Grund für jede Ablehnung, die Anzahl für jeden Inhaltstyp und welches Paket jeden Kampf gewonnen hat.

the report the Mods screen copies

Bonemark mod report
game build: 0.0.0-dev
mods folder: C:/Users/you/AppData/Roaming/Godot/app_userdata/Bonemark/mods
packages: 2 found, 1 loaded

PACKAGES
  northern_reach  v0.1.0  order 100  active
    goods: 12 read, 12 applied, 0 rejected
  winter_roads  unreadable manifest
    - game_version must not be empty

CONTENT (1 families: 12 read, 12 applied, 0 rejected)
  goods: 12 read, 12 applied, 0 rejected

In neun von zehn Fällen steht die Antwort im Block und niemand muss Ihnen zuerst eine einzige Frage stellen. Es liest nichts außerhalb des Mods-Ordners, ändert nichts und enthält keine persönlichen Informationen.

Es ist auf Englisch, auch wenn Sie in einer anderen Sprache spielen. Dies ist beabsichtigt: Die Person, die Ihnen hilft, liest möglicherweise Ihre nicht, und alle darin enthaltenen Fakten – IDs, Versionen, Zählungen – sind in allen Sprachen immer noch gleich.

Entfernen Sie einen

Löschen Sie den Ordner und starten Sie neu. Die Deinstallation ist hier.

Nichts von Ihnen wird dabei gelöscht. Ein Speichervorgang behält die IDs, die nicht mehr aufgelöst werden können, markiert sie und gibt Dinge zurück, wenn das Paket neu installiert wird. Eine Sitzung, die einen Spielstand nicht verstehen kann, überschreibt ihn nicht einmal: Die Originaldatei bleibt genau so, wie sie war, und das ist der Unterschied zwischen einem verlorenen Nachmittag und einem verlorenen Spiel. Speichert ist der vollständige Bericht.

Wenn das Spiel nicht mehr läuft, nachdem Sie etwas installiert haben, ist das Spiel nicht mehr erforderlich. Öffnen Sie den Mods-Ordner und entfernen Sie das zuletzt hinzugefügte Element. Pakete können nur aus diesem Ordner gelesen werden. Ein Ordner, der nicht vorhanden ist, ist also ein Paket, das nicht geladen werden kann, und der nächste Start erfolgt wie zuvor. Sie benötigen dazu kein funktionierendes Menü, keine Konsole oder Startup.

Sogar das Spiel versucht es von alleine – Wenn das Spiel nicht startet ist es eine begrenzte Anzahl von Versuchen und dann ein Rückweg ohne geladene Pakete – aber das ist der Gürtel, und das Verschieben des Ordners ist der Hosenträger.

Beginnen Sie hier

Was Sie heute bauen können

Jetzt, ohne jemanden zu fragen: Waren und ihre Händler, Gegenstände, Personen und ihre Standorte, Gebäude und ihre Dienste, Orte auf der Karte, Gespräche, Szenen, Questpläne, in Tiled gezeichnete Karten, Bilder und Farben sowie alle ihre Texte in sieben Sprachen. Audio- und Schriftdateien werden geprüft und gelesen, aber ihre Paketoberflächen werden noch nicht verbraucht; die Statustabelle sagt das ausdrücklich, statt sie als bereit zu bezeichnen. Alle Familien sind die gemessene Liste, und ihr Status stammt aus dem Build statt aus einem Versprechen.

Noch nicht, und Was du noch nicht tun kannst erklärt jeden Fall: die Familie quests, Paket-Audio, Paket-Schriften, verpackte Total Conversions und ein Paket, das eine Funktion statt Inhalt wäre.

Niemals, aufgrund der Projektauswahl: Code. Keine Skripte, keine Szenen, keine Ressourcendateien, nichts, was das Spiel ausführen könnte. Dies macht es sicher, den Mod eines Fremden herunterzuladen, und es ist keine Phase, die das Projekt durchläuft. Was ein Mod niemals tun kann.

Zeit bis zum ersten, was Sie im Spiel sehen können: Ungefähr zehn Minuten, die größtenteils mit der Suche nach dem Ordner verbracht werden. Ein Mod in zehn Minuten ist vollständig durch und das Schwert am Ende ist echt.

Was Sie noch nicht können und warum

Hier steht es gleich am Anfang, statt erst am Ende entdeckt zu werden. Das sind die Dinge, die der Build prüft, ohne sie derzeit auf eine spielerorientierte Paketoberfläche zu setzen, sowie Dinge, die überhaupt kein Paketinhalt sind.

WasWarum nichtEs wird sich ändern
Die quests-FamilieEs wird erkannt und überprüft und es gibt keinen Runtime-Mapper dahinter, sodass ein Paket, das darauf abzielt, alle Prüfungen umgeht und nichts installiert. Schreiben Sie stattdessen Ihre Quests: quest_plans ist eine lebende Familie und das ist es, was das Spiel wirklich liest.Ja, wenn der Mapper öffentlich ist
Paket-AudioAudio-Deskriptoren und -Dateien werden geprüft und gelesen, aber noch keine laufende Oberfläche verbraucht ein Paket-Audiosignal; ein Mod kann daher Sound liefern, der stumm bleibt.Ja
Paket-SchriftenSchrift-Deskriptoren und die Sprachabdeckung werden geprüft, aber noch kein laufendes Theme verbraucht eine Paket-Schrift.Ja
Eine komplette Konvertierung verpacktDer Build versteht das Manifest und bringt das Ashen Reach-Gerät mit. Was fehlt, ist der verpackte Workflow für Ersteller, nicht der Mechanismus. Eine vollständige Conversion.Ja
Ein Paket, das eine Funktion istVollständig beschlossen und keine Familie trägt es, daher kann kein Poster danach fragen. Jede Familie listet es unter den Dingen auf, die noch keinen Ordner haben.Ja
Was auch immer erledigt wirdEine Scripting-Ebene wird nicht kommen. Das Manifest enthält eine Art Paket, das Verhalten versendet, das Einzige, was seine Ausführung autorisieren könnte, lehnt es ab, es gibt keine Sandbox dahinter und ein Paket, das es heute als abgelehnt erklärt. Was ein Mod niemals tun kann.NEIN

Eine Mechanik, die das Spiel noch nie hatte, ist die vierte Reihe mit einem anderen Hut. Ein Schwert, das härter zuschlägt, ist eine Zahl und gehört dir; Eine Waffe, die einen Strahl abfeuert, benötigt die Regeln des Strahls, und die Regeln sind Code, den jemand schreibt und testet.

Was ist ein Mod?

Ein Ordner mit Textdateien. Sie schreiben keinen Code. Sie schreiben Listen mit Dingen, die Sie im Spiel haben möchten, und das Spiel liest sie, wenn es startet.

WortWas bedeutet es
PaketDein Mod. Ein Ordner mit Ihrem Namen darauf.
Manifestmod.json, oben in diesem Ordner. Wer bist du, was bringst du mit?
AufzeichnenEine Sache, die Sie hinzufügen. Ein Schwert ist eine Schallplatte.
FamilieSo etwas. Schwerter, Helme und Brot sind alles items. Jede Familie hat ihren eigenen Ordner.
Ausweisyour_package:the_thing – zum Beispiel northern_reach:frost_blade.

Die einzige Regel, aus der sich alles andere ergibt: Sie können Daten hinzufügen und ändern. Sie können das Spiel nicht dazu bringen, Code auszuführen. Das macht es sicher, einen Mod herunterzuladen: Das Schlimmste, was der Mod eines Fremden anrichten kann, ist, ein albernes Schwert auf dich zu legen.

34 Familien sind heute sofort einsatzbereit, darunter items, buildings, pois, npc_definitions, vendor_inventories, quest_plans, caravans und perks. Alle Familien bilden die vollständige Tabelle mit dem Zweck jeder Familie; Die Familien einzeln zeigen ihre Felder und einen kopierbaren Datensatz.

Wählen Sie Ihren Weg

Dies ist das Inhaltsverzeichnis des gesamten Leitfadens – hier wird über jedes Thema geschrieben, unabhängig davon, ob Sie es heute erstellen oder nicht. Oben in Teil 3 befindet sich ein zweiter, kürzerer Index: Das sind die sechs Tutorials in der Reihenfolge, in der sie aufeinander aufbauen. Wenn Sie hier sind, um etwas zu tun und nicht, um etwas zu suchen, dann gehen Sie direkt dorthin.

Du willstGehe zu
Etwas von Anfang bis Ende aufbauenBeginnen Sie mit dem, was Sie tun möchten – die sechs Tutorials, nur ein Paket
Laden Sie eine Datei in zehn Minuten hochEin Mod in zehn Minuten
Suchen Sie nach Feldern für eine Familie und ein BeispielDie Familien, eine nach der anderen
Sehen Sie alles, was Sie tun dürfenJede Familie
Etwas ändern, was das Spiel ohnehin mit sich bringtÄndern, was das Spiel bereits hat
Fügen Sie Ihre eigene Kunst, Ihren eigenen Ton, Ihren eigenen Schriftzug oder Ihre eigene Farbe hinzuBilder, Ton, Schrift, Farbe
Zeichnen Sie einen Ort in TiledIhre Karten
Schreiben Sie eine MissionDeine Quests
Verstehen Sie, warum nichts angezeigt wurdeNichts wurde angezeigt
Suchen Sie nach einem FehlercodeJeder Diagnosecode
Wissen Sie, was ein Mod niemals kannWas ein Mod niemals tun kann
Zerbrich nicht den Save von jemandemSpeichert
Platzieren Sie es dort, wo die Leute es mitnehmen könnenTeilen

Oder die Sache, die dir durch den Kopf geht. Diese Anleitung ist in der Reihenfolge angeordnet, in der die Arbeit stattfindet – Manifestieren, dann Validieren, dann Inhalt, dann Berichten –, was die Reihenfolge ist, die jemand wählen würde, der das System bereits kennt. Diejenigen, die ihn nicht kennen, denken Ich möchte einen Händler hinzufügen und suchen nach dem Wort Händler:

Du fügst hinzuDie Familien, die es tunWo sie geschrieben sind
Handel und Warengoods, vendor_inventories, caravans, recipesDinge, Handel und die Zahlen hinter einem Kampf
Dinge, die ein Spieler mitbringtitems, combat_balanceDinge, Handel und die Zahlen hinter einem Kampf
Menschennpc_definitions, mercenary_templates, noble_houses, relationships, perks, enemy_archetypes, enemy_variants, group_archetypesMenschen, Häuser und was sie tun können
Orte und Gebäudebuildings, pois, maps, world_generationDie Welt und die Orte darin
Wörter, die ein Spieler liestlocales, dialogue, scenes, lore, mr_lines, quest_plans, quest_metadata, progressGeschichte, Quests und die Wörter, die ein Spieler liest
Wie es aussieht und wie es klingtimages, audio, fonts, themes, effects, presentation_bindings, screensWie alles aussieht und klingt
Befehle und Schwierigkeiteninput_bindings, settings, adaptiveWas der Spieler kontrolliert und was ihn beobachtet

Was brauchen Sie

Das SpielNotwendigKein Godot, kein Compiler, keine Build-Schritte.
Ein Texteditor, der JSON verstehtNotwendigVS Code, Sublime, Notepad++ – alles kostenlos. Windows Notepad funktioniert und hilft Ihnen nicht weiter.
Ein Pixel-Art-EditorNur für deine KunstAseprite (~20 €), oder kostenlos: LibreSprite, Piskel, Krita, GIMP.
Ein Audio-EditorNur für deinen SoundAudacity. Kurze Effekte aus dem Nichts: sfxr, ChipTone.
GekacheltNur für Ihre KartenFrei. Export nach .tmj.

Ein Editor, der JSON einfärbt, zeigt Ihnen ein fehlendes Komma an, während Sie es noch betrachten, anstatt dass das Spiel Ihnen später mitteilt, dass die Datei nicht lesbar war.

Python und die Konsole sind optional. Das Spiel genügt: Lege das Paket ab, starte neu und öffne Mods, wo jeder abgelehnte Datensatz samt Grund genannt wird. Der Autoren-Checkout ist öffentlich. Wer schneller iterieren oder Veröffentlichungen automatisieren möchte, kann den öffentlichen Bonemark-Checkout klonen und die Offline-Werkzeuge unter Offline-Werkzeuge ausführen; Spieler eines veröffentlichten Pakets benötigen weder Python noch Godot. Derselbe öffentliche Checkout enthält den Validator und die Runtime-Deklarationen, daher beschreiben die beiden Abschnitte eine gemeinsame Werkzeugkette. Die Werkzeuge verwenden dieselben Deklarationen wie das Spiel — Record-Schemas und Sicherheitsgrenze haben jeweils eine einzige Quelle — und antworten deshalb früher, niemals anders. Eine Debug-Konsole hilft beim Prüfen eines geladenen Pakets, ist aber zum Schreiben keines nötig.

Erstellen Sie eins

Beginnen Sie mit dem, was Sie tun möchten

Alles unterhalb dieser Zeile ist in der Reihenfolge angeordnet, in der die Arbeit stattfindet: Plakat, dann Akten, dann Familien, dann Berichte. Es ist die richtige Reihenfolge, etwas zu suchen, und die falsche, damit anzufangen, denn niemand beginnt mit einem Manifest. Es beginnt mit Ich möchte einen Händler.

Dann: Wählen Sie den Satz, der dem ähnelt, was Sie tun möchten.

Du willstGehe zuWie lange dauert es
Fügen Sie etwas zum Kaufen und Verkaufen hinzu[Ein Gut zum Verkaufen](#ein Gut zum Verkaufen)15 Minuten
Füge etwas hinzu, das ein Spieler bei sich trägtEin Gegenstand zum Tragen10 Minuten nach dem oben genannten
Fügen Sie eine Person hinzu, die es verkauftEin Händler, der es besitzt30 Minuten
Fügen Sie einer Siedlung eine Tür hinzuDer Service eines Gebäudes20 Minuten
Fügen Sie einen Ort auf der Weltkarte hinzuEin Ort auf der Karte20 Minuten
Etwas ändern, was das Spiel bereits hatÄndern, was bereits da ist15 Minuten
Zeichnen Sie eine Karte, schreiben Sie eine Mission, bringen Sie Kunst mitDeine Karten, Deine Quests, Bilder, Ton, Schrift, Farbelänger, und alle drei sind lebende Familien
Bringen Sie die Familie quests mit, eine gepackte Gesamtkonvertierung oder ein Paket, das eine Funktion darstelltNoch nicht. [Was Sie noch nicht tun können und warum] (#was-Sie-noch-nicht-tun-und-warum) nennt jeweils den Grund und sagt, welche sich ändern werden.
Fügen Sie eine Regel hinzu, die es im Spiel nie gabNichts hier tut es und nichts wird es tun. Was ein Mod niemals tun kann sagt in einem Absatz, warum.

Die sechs Tutorials sind ein einzelnes Paket, das Stück für Stück zusammengebaut wird: eine Bienenwachskerze, das Bündel, das ein Spieler bei sich trägt, der Wachsmacher, der es verkauft, die Tür zu seinem Laden, die Grube hinter der Gerberei, aus der der Talg stammt, und schließlich eine Modifikation der Kerze, die das Spiel bereits hatte. Machen Sie sie der Reihe nach und erhalten Sie am Ende einen Mod, den jemand herunterladen könnte. Legen Sie eins in die Mitte und es funktioniert von alleine.

Wo sind die Spielnummern?

Jedes Tutorial hier bewertet eine neue Sache, indem es sie mit etwas vergleicht, das das Spiel bereits verkauft, denn eine Zahl ohne nichts daneben ist eine Schätzung, und eine Schätzung in einer Wirtschaft, die zwischen Städten Handel treibt, bleibt nicht dort, wo Sie sie eingegeben haben.

Sie können die Spieldateien nicht öffnen. Seine Datensätze sind Godot-Assets innerhalb des gepackten Builds – ein anderes Format als das JSON, das Sie schreiben, mit category = 1, wobei in Ihrer Datei "MANUFACTURED" steht. Es gibt keinen Ordner zum Kopieren und das Entpacken ist kein Arbeitsablauf, den jemand dokumentieren muss.

Du brauchst es nicht. Der Katalog veröffentlicht den Inhalt des Spiels, der bei jedem Build aus denselben Datensätzen generiert wird: 270 Gegenstände mit ihrer Kategorie, ihrem Gewicht, ihrem Münzwert und ihrer Stapelgröße, 49 Waffen, 42 Rüstungsteile, 37 Standorte. Es ist die Referenz, auf der dieser Leitfaden basiert, er kann nicht vom Spiel abweichen und der Name des Feldes ist neben jeder Zeile abgedruckt.

Ein Dutzend Werte, die Sie kennen sollten, bevor Sie einen Preis für etwas festlegen:

Das Spiel ist bereits verkauftMünzenUND
Ton, Stein, Schilf1der Boden. Graben oder schneiden, keine Arbeit im Inneren
Maserung, Holz2
Kerze3ein leichter Abend
Wolle, Fisch, Trauben4
Brot6ein Tagesessen
Salz, Honig, Seil8
Stoff (Stück)10gewebt aus 2 Wolle und 1 Schilfrohr
Raffiniertes Eisen, gesalzener Fisch12
Schwarzer Pfeffer14ein Import, und man kann es spüren
Leder, Käse15
Wein25
Einhandwaffen50–300die Band, kein einziger Wert
Zweihandwaffen150–600
Grobblech500–1500die Obergrenze der gesamten Wirtschaft

Wenn Ihr neues Ding mehr kostet als eine Plattenrüstung, ist etwas schief gelaufen, und das Spiel verrät es Ihnen nicht – es wird stillschweigend zur profitabelsten Fracht der Welt und jede Karawane wird sie transportieren.

Eine Ware zum Verkaufen

Sie werden über eine Ware verfügen, deren Preis die Wirtschaft zu bestimmen weiß, die an die Kerze gekoppelt ist, die das Spiel bereits verkauft, und die von einem Händler gehalten werden kann.

Screenshot: Noch nicht aufgenommen. Dieser Raum bleibt leer, bis es ein echtes gibt: Eine Zeichnung, wie es aussehen könnte, wäre das Einzige auf der Seite, das nicht real ist.

Zuerst lesen: Was ist ein Mod · Ein Mod in zehn Minuten · Namen und IDs

Kopieren aus: dem Ordner namens chandlery, der sich bereits in Ihrem Mods-Ordner befindet. Das Spiel legt es dort ab, wenn es zum ersten Mal gestartet wird, wenn es ausgeschaltet ist, und es ist das Endergebnis dieser sechs Tutorials: Alle unten aufgeführten Datensätze sind vorhanden. Es ist auch das Paket, das die Testspur des Repositorys gegen den Loader dreht, daher gibt es hier keinen Datensatz, den das Spiel ablehnen würde. Schalten Sie es ein, um zu sehen, wie es funktioniert, oder kopieren Sie den Ordner, benennen Sie ihn um und machen Sie ihn zu Ihrem.

Wohin die Dateien gehen:

where the files go

mods
└ chandlery
  ├ mod.json
  └ content
    └ economy
      └ goods
        └ goods.json

Beginnen Sie mit der Kerze, die das Spiel bereits hat. Sie heißt candle, kostet 3, wiegt 0,5, ist MANUFACTURED und PRESERVED und wird vom Apotheker hergestellt. Bei Ihnen handelt es sich um dasselbe Ding aus besserem Wachs. Behalten Sie also alle Antworten bei und ändern Sie zwei.

Vor mod.json:

mod.json

{
  "id": "chandlery",
  "name": "The Chandlery",
  "version": "0.1.0",
  "game_version": "0.0.0-dev",
  "dependencies": [],
  "load_order": 100,
  "content_types": ["goods"],
  "overrides": [],
  "canon_safe": true
}

Dann content/economy/goods/goods.json:

a goods record

[
  {
    "id": "chandlery:beeswax_candle",
    "display_name": "Beeswax Candle",
    "category": "MANUFACTURED",
    "decay_tier": "PRESERVED",
    "base_price": 9,
    "weight": 0.4,
    "production_class": "chandler",
    "daily_consumption_class": "household",
    "tags": ["light", "household"]
  }
]
FeldWarum dieser Wert
idDer Name Ihres Pakets, ein Doppelpunkt, dann Ihr Wort. Alles, was nicht Ihren Namensraum voranstellt, wird abgelehnt, sodass Sie nicht versehentlich die ID einer anderen Person übernehmen können.
display_nameWas für ein Spieler liest. Kein Artikel – „Bienenwachskerze“, niemals „Eine Bienenwachskerze“: Der Artikel wird durch die Phrase um ihn herum angegeben, und welcher Artikel hängt von der Sprache ab. Wörter, die ein Spieler liest.
categoryMANUFACTURED, weil es jemand macht. Die fünf sind Rohstoffe, Artefakte, Verbrauchsmaterialien, Munition und Ausrüstung, und die von Ihnen gewählte Option entscheidet, welche Produktionsgebäude und Karawanen betroffen sind.
decay_tierPRESERVED – 90 Tage, wie die Spielkerze. Das Wachs bleibt erhalten; es bleibt nicht für immer erhalten. PERISHABLE beträgt 7 Tage und ETERNAL verrottet nie.
base_price9. Die einfache Kerze im Spiel ist 3 und ein Glas Honig ist 8. Bienenwachs stammt aus den gleichen Bienenstöcken wie Honig und brennt ohne den Geruch von geschmolzenem Fett, sodass es knapp über Honig liegt und etwa dreimal so gut wie Talgkerze ist. Es ist kein Import: Schwarzer Pfeffer ist 14 und hat ein Meer überquert.
weight0,4, etwas unter den 0,5 der einfachen Kerze. Das Gewicht ist das, was ein Wohnwagen tragen kann. Eine Ware, die nichts wiegt und sich teuer verkaufen lässt, ist also ein Käfer, den Sie mit Absicht schreiben.
production_classWelchen Beruf übt sie aus? chandler ist derjenige, den das Referenzpaket verwendet.
daily_consumption_classWer konsumiert es? household bedeutet, dass Städte es ständig verbrauchen, und das ist es, was einen Händler versorgt.
tagsFreie Worte. Andere Datensätze und Ihre Folgedateien können diese durchsuchen.

Fertig – jetzt finden Sie es im Spiel. Starten Sie neu, öffnen Sie Mod und in der Zeile unter Ihrer steht 1 entry added. Es ist alles, was eine Ware für sich allein tut: Sie hat einen Preis, sie ist marktfähig und sie liegt bei niemandem auf der Ladentheke, weil sie noch niemand hat. Es ist kein Misserfolg und es ist die Sache, die jeden einmal verwirrt. Fahren Sie fort mit Ein Händler, der es auf Lager hat.

Wenn nicht angezeigt: Nichts wurde angezeigt hat die sechs Gründe in der richtigen Reihenfolge. Die mit Abstand häufigste ist content_types – eine fehlende Familie in dieser Zeile bedeutet, dass der Ordner nie geöffnet wird, egal, was er enthält. Dann Bevor Sie jemanden um Hilfe bitten, was eine einzelne Schaltfläche ist.

Ein Gegenstand zum Tragen

Du erhältst das Ding, das ein Spieler aufnimmt, in seinen Rucksack stapelt und weiterverkauft, gepaart mit den Waren, die du gerade geschrieben hast.

Screenshot: Noch nicht aufgenommen.

Zuerst lesen: [Ein Gut zum Verkaufen](#ein Gut zum Verkaufen) · Namen und IDs

Kopieren von: chandlery/content/inventory/items/items.json in deinen Mods-Ordner.

Wohin die Dateien gehen:

where the files go

mods
└ chandlery
  ├ mod.json
  └ content
    ├ economy
    │ └ goods
    │   └ goods.json
    └ inventory
      └ items
        └ items.json

Eine Ware und ein Gegenstand sind zwei Hälften derselben Sache. Die Ware ist der Gesichtspunkt der Ökonomie: was eine Stadt produziert, was eine Karawane transportiert, wie viel sie wert ist. Das Objekt ist die Sicht des Spielers: Was passt in den Rucksack, was ist gestapelt, was wird in einem Laden ausgestellt. Weizen hat eine Ware und keinen Zweck, denn niemand trägt eine Tüte Weizen mit sich herum. Kerzen haben beides.

Fügen Sie "items" zu content_types in mod.json hinzu und schreiben Sie dann content/inventory/items/items.json:

a items record

[
  {
    "id": "chandlery:beeswax_candle_bundle",
    "display_name": "Bundle of Beeswax Candles",
    "category": "MATERIAL",
    "rarity": "COMMON",
    "weight": 0.4,
    "max_stack": 20,
    "base_value": 10,
    "sellable": true,
    "tags": ["light", "household"]
  }
]
FeldWarum dieser Wert
idSein Ausweis, nicht der der Ware. Es handelt sich um unterschiedliche Datensätze in unterschiedlichen Familien, und nichts zwingt sie zur Übereinstimmung: Sie zu koppeln ist Ihre Aufgabe, und in der darunter liegenden Händlerzeile erfolgt die Paarung.
categoryMATERIAL, das ist die Spielkerze. Nicht CONSUMABLE: Du isst nichts.
rarityCOMMON. Seltenheit ist das, was die Beutetabellen und -läden anzeigen, wenn sie gewürfelt werden; etwas Alltägliches passiert.
weight0,4, wie die Ware. Wenn die beiden nicht einer Meinung sind, sind sich der Rucksack des Spielers und die Karawane nicht über denselben Gegenstand einig.
max_stack20, wie warme Semmeln und wie das Referenzpaket-Bundle. Zwanzig ist der gewöhnliche Stapel des Spiels für kleine Dinge, die man bei sich trägt; 1 steht für etwas Einzigartiges.
base_value10 gegenüber 9 für die Ware. Ein Bündel hat einen kleinen Aufschlag gegenüber dem Massenpreis – das Referenzbündel Talgbündel ist 4 im Vergleich zu einem 3-Ware-Bündel, und dies ist die gleiche Form einen Schritt weiter oben.
sellableStimmt, sonst kann ein Händler es nicht von Ihnen zurückkaufen.

Fertig – jetzt im Spiel finden. Ein Gegenstand, den niemand liefert, ist geladen und aus dem Nichts erreichbar. In einem Debug-Build legt item chandlery:beeswax_candle_bundle sofort einen in Ihren Rucksack und es ist der schnellste Beweis dafür, dass er geladen ist – aber dieser Befehl existiert nicht in dem Spiel, das die Leute herunterladen, also ist er eine Verknüpfung für Sie und niemals die Antwort für einen Spieler. Die eigentliche Antwort ist das nächste Tutorial.

Wenn nicht angezeigt: Nichts angezeigt, dann Bevor Sie jemanden um Hilfe bitten.

Ein Händler, der es besitzt

Sie werden eine Frau mit einem Namen haben, die in Old Seat mit einer Theke, Vorräten, die alle zwei Tage aufgefüllt werden, und Ihren Kerzen auf der Theke steht.

Screenshot: Noch nicht aufgenommen.

Zuerst lesen: Ein Gegenstand zum Tragen · Jetzt im Spiel finden

Kopieren von: chandlery/content/narrative/npcs/npcs.json und chandlery/content/world/vendor_inventories/vendors.json.

Wohin die Dateien gehen:

where the files go

mods
└ chandlery
  ├ mod.json
  └ content
    ├ economy
    │ └ goods
    ├ inventory
    │ └ items
    ├ narrative
    │ └ npcs
    │   └ npcs.json
    └ world
      └ vendor_inventories
        └ vendors.json

Hier müssen zwei Familien zustimmen. Die Person trägt die ID der Bank, die Bank trägt die ID der Person und jede Zeile der Bank trägt die ID eines Objekts. Drei IDs, und jede muss genau so geschrieben sein, wie Sie sie in die andere Datei geschrieben haben. Es ist der Fehler, der einen Abend kostet, und der Mods-Bildschirm benennt ihn: Eine Zeile, die auf eine ID zeigt, die niemand bereitstellt, wird als erfordert einen anderen Mod, der nicht installiert ist aufgeführt.

Fügen Sie "npc_definitions" und "vendor_inventories" zu content_types hinzu.

a npc_definitions record

[
  {
    "id": "chandlery:hesta",
    "display_name": "Hesta the Chandler",
    "title": "Candle Seller",
    "short_bio": "She renders fat behind the tannery and sells what burns longest.",
    "voice_tone": "brisk",
    "faction": "NONE",
    "role": "NONE",
    "settlement_id": "old_seat",
    "is_vendor": true,
    "vendor_inventory_id": "chandlery:candle_stall",
    "price_multiplier": 1.0,
    "personality_tags": ["brisk", "practical"],
    "offers_quest_ids": []
  }
]

a vendor_inventories record

[
  {
    "id": "chandlery:candle_stall",
    "display_name": "Chandler's Stall",
    "npc_id": "chandlery:hesta",
    "global_price_multiplier": 1.0,
    "buyback_rate": 0.35,
    "entries": [
      {
        "item_id": "chandlery:beeswax_candle_bundle",
        "kind": "misc",
        "daily_stock": 6,
        "price_multiplier": 1.0,
        "restock_days": 2,
        "min_standing": 0
      }
    ]
  }
]
FeldWarum dieser Wert
settlement_idVerwende eine von den Autoren angelegte Siedlungs-ID. Siedlungs-IDs sind von den Autoren angelegt und stabil: Durnwall, Thorngate, Valdmere, Grentham und die zwölf Dörfer können alle benannt werden. Der Seed verändert das Gelände und die Biome darum, die Knappheit des Jahres und die politische Ordnung, nicht die ID.
is_vendor + vendor_inventory_idGemeinsam verwandeln sie einen Menschen in einen Laden. Eins ohne das andere ist eine Person, die nicht verkaufen kann, oder eine Theke, um die sich niemand kümmert.
price_multiplier1,0 – fragt, wie viel Dinge wert sind. Über 1 ist ein Ort, der weiß, dass Sie keine Optionen haben; Die Händler im Spiel liegen bei 1,0, wenn auf der Karte kein Grund angegeben ist.
buyback_rate0,35: Zahlen Sie etwa ein Drittel des Wertes für das, was Sie ihr verkaufen. Es ist die Zahl, die die Spieler am häufigsten hören und die der Händler der Referenzpakete verwendet.
daily_stock6. Wie viele er hat, wenn die Bank wieder auffüllt. Sechs ist der Referenzpaketwert für ein billiges Eigenheim; einer ist für etwas, das eine Stadt zweimal im Jahr sieht.
restock_days2, es wird also alle zwei Tage wieder aufgefüllt – und nicht an dem Tag, an dem Sie den Mod installieren. Aus diesem Grund scheint ein neuer Händler zunächst leer zu sein. In einem Debug-Build rückt day einen Tag vor.
min_standing0: Jeder kann kaufen. Über Null liegen die Bestände, die sie für Menschen hält, die sie mag.
kindAuf welcher Art von Theke befindet es sich – misc für Haushaltswaren? Die anderen sind weapon, armor, shield, consumable und ammo.

Fertig – jetzt finden Sie ihn im Spiel. Starten Sie neu, reisen Sie zum Old Seat, finden Sie Hesta, öffnen Sie den Handelsbildschirm. Wenn die Bank leer ist, wurde sie noch nicht aufgefüllt: Das ist restock_days, kein Fehler. Die Kette kann auf drei Arten unterbrochen werden und alle drei sind auf dem Mod-Bildschirm zu sehen: die Waren, die niemand hält, der Zähler, der auf eine Artikel-ID zeigt, die nicht existiert, die Person, die auf eine Zähler-ID zeigt, die nicht existiert.

Sie kann auch sprechen. Eine dialogue_graph, deren ID speaker ist, macht Witze, wenn ein Spieler darauf klickt, und Ihr Paket muss nichts neu definieren, was das Spiel bereits benötigt, um sie zu erhalten – siehe Ihre Gespräche. Eine locales-Datei bietet Ihnen all dies in sieben Sprachen.

Wenn nichts angezeigt wird: Vergleichen Sie zuerst die drei IDs miteinander, dann Nichts wurde angezeigt und dann Bevor Sie jemanden um Hilfe bitten.

Der Service eines Gebäudes

Sie werden in einer Siedlung eine Tür mit Ihrem Etikett und Ihrer Farbe haben, die zu einem Innenraum führt, den das Spiel bereits hat.

Screenshot: Noch nicht aufgenommen.

Zuerst lesen: [Ein Händler, der es behält](#ein-Händler-der-es-auf Lager hat) · [Was ein Mod niemals tun kann](#was-ein-Mod-nicht-tun kann)

Kopieren von: chandlery/content/world/buildings/buildings.json.

Wohin die Dateien gehen:

where the files go

mods
└ chandlery
  └ content
    └ world
      └ buildings
        └ buildings.json

Sie kombinieren neu, nicht erstellen. Ein buildings-Eintrag fügt einen neuen Dienst mit einer Bezeichnung, einer Portfarbe und einer Routinerolle hinzu und kann eine Erweiterung, die das Spiel bereits hat, durch Benennung wiederverwenden. Eine Verlängerung ist nicht möglich. Eine Erweiterung ist eine Szene, eine Szene ist Code und ein Paket, das einen Pfad res:// oder einen .tscn nennt, wird abgelehnt, bevor dieser Datensatz überhaupt gelesen wird. Es ist kein Loch, das darauf wartet, gefüllt zu werden: Es ist die Zeile, die es sicher macht, den Mod eines Fremden zu installieren.

a buildings record

[
  {
    "id": "chandlery:chandlery",
    "label": "Chandlery",
    "role": "merchant",
    "color": { "r": 0.44, "g": 0.38, "b": 0.24 },
    "interior_service": "shop"
  }
]
FeldWarum dieser Wert
labelDie Worte an der Tür. Wenn Sie es weglassen, schreibt das Spiel Ihre ID groß und sie liest sich wie eine ID.
roleWas machen die Leute den ganzen Tag drinnen? merchant bringt die Routine eines Ladenbesitzers hinter die Tür. Die Rolle hängt vom Vokabular des Spiels ab, nicht von Ihnen: Ein Fremder stürmt herein und verhält sich wie nichts Besonderes.
colorBienenwachs braun, 0.44 / 0.38 / 0.24. Jeder Kanal reicht von 0 bis 1, und ein HTML-Hex-String funktioniert ebenfalls. Wählen Sie etwas, das der Größe entspricht, in der eine Tür gezeichnet wird – Kunst, die passt.
interior_serviceshop – die Inneneinrichtung, die das Spiel bereits für ein Geschäft entwirft. Der Trick dabei ist: Man bekommt ein echtes, möbliertes Zimmer, ohne eines mitzubringen.

Fertig – jetzt finden Sie es im Spiel. Starten Sie neu und betreten Sie eine Siedlung, die Ihren Dienst hat. Ein Datensatz ohne settlement wird geladen und nirgendwo platziert, was mit einem fehlgeschlagenen Datensatz identisch ist: Auf dem Mod-Bildschirm wird 1 entry added angezeigt, und Sie werden nichts finden. Lesen Sie die Zeile, bevor Sie nach der Tür suchen.

Wenn es nicht angezeigt wird: Nichts angezeigt · Bevor Sie jemanden um Hilfe bitten.

Ein Ort auf der Karte

Sie werden einen Punkt auf der Weltkarte haben, über den ein Spieler stolpern kann, mit einer Beschreibung davon und seiner Auswirkung auf die Stimmung der Party.

Screenshot: Noch nicht aufgenommen.

Zuerst lesen: Der Gebäudeservice · Jetzt im Spiel finden

Kopieren von: chandlery/content/world/pois/pois.json.

Wohin die Dateien gehen:

where the files go

mods
└ chandlery
  └ content
    └ world
      └ pois
        └ pois.json

Koordinaten sind absolut, und die Welt wird um von den Autoren angelegte Orte erzeugt. Die Karte misst 61 440 × 34 560 Weltpixel, und Old Seat liegt in jeder Partie genau im Zentrum bei (30720, 17280). Die von den Autoren angelegten Städte und Dörfer behalten ihre Namen und Positionen. Der Seed verändert das Gelände und die Biome darum, die Knappheit des Jahres, die politische Ordnung und die Wege, die sich lohnen. Ein Punkt bleibt also echt und stabil; was daneben liegt, ändert sich in jeder Partie. Zwei ehrliche Verwendungen: Setze einen POI nahe an eine von den Autoren angelegte Siedlung, damit ein Spieler dort vorbeikommt; oder wähle die Leere, denn eine Rendergrube, die seit Jahren niemand besucht hat, soll nirgendwo Bestimmtes liegen.

a pois record

[
  {
    "id": "chandlery:tallow_pit",
    "kind": "RUINS",
    "display_name": "The Tallow Pit",
    "description": "A rendering pit behind the tannery. The smell reaches the road.",
    "world_position": { "x": 5400.0, "y": 3000.0 },
    "discovery_radius": 2.0,
    "one_time_loot": false,
    "morale_modifier": -1,
    "awareness_modifier": 0.0
  }
]
FeldWarum dieser Wert
kindRUINS – was zeichnet die Karte und wofür das Spiel sie hält.
world_position(5400, 3000), weit nordwestlich der Mitte: Absichtliche Nichtigkeit, zweite von zwei ehrlichen Verwendungen oben. Bewegen Sie es innerhalb weniger tausend Pixel von (30720, 17280) und es wird zu einem Ort, den die Spieler tatsächlich finden.
discovery_radius2.0. Wie nah die Gruppe bestehen muss. Groß genug, um es entlang einer Straße zu finden, klein genug, um es nicht von einem Ende einer Provinz zum anderen zu verkünden.
morale_modifier−1. Es ist eine Grube mit geschmolzenem Fett. Die Zahl ist absichtlich klein: Ein Ort ist ein Ort, kein Ereignis, und −1 ist eine Stimmung, keine Strafe.
awareness_modifier0,0 – hilft nicht zu erkennen. Belassen Sie eine Zahl bei Null, anstatt das Feld zu entfernen, wenn Null eine Entscheidung ist.
one_time_lootFalsch: Es gibt nichts zum Mitnehmen, also auch nichts zum einmaligen Mitnehmen.

Fertig – jetzt finden Sie es im Spiel. Los geht's. Es gibt keinen Teleport-Befehl, weder in einem Debug-Build noch außerhalb, also wählen Sie die Koordinaten so weit aus, wie Sie bereit sind, beim Versuch zu gehen.

Wenn es nicht angezeigt wird: Sie sind wahrscheinlich nicht mehr in discovery_radius, oder der Ort befindet sich irgendwo, wo der Match-Seed einen Ozean hinterlassen hat. Nichts wurde angezeigt.

Ändern, was bereits vorhanden ist

Sie haben einen Datensatz, den das Spiel mit sich gebracht hat, geändert – und Sie haben ihn deklariert, sodass die Änderung für den Spieler und jeden anderen Mod sichtbar ist.

Screenshot: Noch nicht aufgenommen.

Zuerst lesen: Ändern, was das Spiel bereits hat · Wenn zwei Mods dasselbe wollen

Kopieren von: chandlery/content/economy/goods/goods.json, wodurch ein Datensatz hinzugefügt und einer aus dem Spiel in derselben Datei korrigiert wird.

Wohin die Dateien gehen: Nirgendwo neu. Eine Änderung an etwas, das das Spiel bereits im selben Familienordner hat, in dem sich Ihre Datensätze befinden – in der Datei steht, welchen Datensatz es beabsichtigt und was es damit macht.

where the files go

mods
└ chandlery
  ├ mod.json          the change is declared here
  └ content
    └ economy
      └ goods
        └ goods.json  your record and the patch, in one file

Zwei Regeln vor der Datei. Eine Änderung am Datensatz einer anderen Person muss in overrides innerhalb von mod.json benannt werden – ein Datensatz, der auf einer ID landet, die Sie nicht deklariert haben, wird abgelehnt, sodass nichts heimlich umgeschrieben werden kann, dem der Spieler nicht zugestimmt hat. Und patch, das ein Feld ändert und den Rest in Ruhe lässt, erfordert "manifest_version": 2.

mod.json

{
  "id": "chandlery",
  "name": "The Chandlery",
  "version": "0.1.0",
  "game_version": "0.0.0-dev",
  "manifest_version": 2,
  "load_order": 100,
  "content_types": ["goods", "items", "npc_definitions", "vendor_inventories", "buildings", "pois"],
  "overrides": ["candle"],
  "canon_safe": true
}

a goods record

[
  {
    "op": "patch",
    "id": "candle",
    "changes": [
      { "op": "set", "field": "base_price", "value": 4 },
      { "op": "append_unique", "field": "tags", "value": "chandlery_touched" }
    ]
  }
]
AuswahlWarum
patch, nicht replacereplace erbt nichts: Sie müssten das Gewicht der Kerze, ihren Zerfallsgrad, das verbundene Objekt und die Produktionsklasse neu schreiben, und an dem Tag, an dem das Spiel den Kerzen ein neues Feld gab, wäre Ihre Kopie die einzige Kerze auf der Welt ohne sie.
3 → 4Eine Münze, und der Grund ist der Mod selbst: Ihre Stadt ist eine Stadt, in der Wachs ordentlich schmilzt, daher ist die gewöhnliche Kerze hier etwas mehr wert. Der Wechsel von 3 auf 30 würde keine Änderung an einer Kerze bedeuten, sondern eine Änderung der Ladepriorität jedes Wohnwagens.
append_unique bis tagsDas einzige, was zwei Mods ohne Konflikt tun können. Wenn beide dasselbe Label in der Warteschlange haben, handelt es sich nicht um einen Konflikt und es wird nicht verdoppelt.
Benennen Sie ein Feld, niemals eine Positiontags.0 wird abgelehnt. Das heutige dritte Etikett ist das zweite Etikett, nachdem Sie das Paket einer anderen Person geladen haben.

Fertig – jetzt finden Sie es im Spiel. Der Mod-Bildschirm benennt den Datensatz, den Sie erworben haben. Der Bildschirm des anderen Autors macht dies auch, falls es einen gibt: Wenn zwei Pakete die gleiche ID schreiben, steht in der Zeile des Verlierers jetzt replaced: Candle – 'chandlery' writes it last, anstatt stillschweigend einen Eintrag weniger anzuzeigen, als er geschrieben hat. Wer den höchsten load_order hat, schreibt zuletzt und gewinnt.

Gewinnen ist nicht dasselbe wie Erlaubnis zu haben. Zwei Pakete, die einen Datensatz annehmen, ohne sich gegenseitig in supersedes zu benennen, werden als undeclared_collision gemeldet und die Zusammensetzung ist nicht in Ordnung: Der Offline-Validator sagt dasselbe und lehnt ab:

typed into the debug console

ERROR: conflict on goods:candle: ['early', 'late'] each supply the whole record
and none declares the others under `supersedes`

Der Gewinner wird noch ermittelt, denn eine Absage muss nicht auch ein Münzwurf sein, sondern zwei Autoren, die es beide wollten, müssen es sagen. Wenn zwei Mods dasselbe wollen ist diese Konversation.

Wenn es nicht erscheint: Die übliche Ursache ist overrides – die ID muss in dieser Liste genau geschrieben sein, andernfalls wird der Datensatz abgelehnt statt angewendet. Wenn zwei Mods dasselbe wollen · Nichts angezeigt.

Ein Mod in zehn Minuten

1. Erstellen Sie einen Ordner in Ihrem Mods-Ordner, mit dem Namen in Kleinbuchstaben und Unterstrichen: northern_reach. Da drin passiert alles.

2. Schreiben Sie oben mod.json:

mod.json

{
  "id": "northern_reach",
  "name": "The Northern Reach",
  "version": "0.1.0",
  "game_version": "0.0.0-dev",
  "dependencies": [],
  "load_order": 100,
  "content_types": ["items"],
  "overrides": [],
  "canon_safe": true
}

id muss mit dem Ordnernamen übereinstimmen. content_types listet die Familien auf, die Sie mitbringen – eine Familie, die in dieser Zeile fehlt, wird nie gelesen, egal, was sich im Ordner befindet.

3. Erstellen Sie die Ordner content/inventory/items und fügen Sie blades.json hinein:

a items record

[
  {
    "id": "northern_reach:frost_blade",
    "display_name_key": "northern_reach.item.frost_blade.name",
    "display_name": "Frost Blade",
    "category": "weapon",
    "base_value": 240,
    "weight": 3
  }
]

Die eckigen Klammern sind eine Liste: Fügen Sie so viele Schwerter hinzu, wie Sie möchten, durch Kommas getrennt. Jede .json-Datei in einem Familienordner wird gelesen, also teilen Sie sie nach Ihren Wünschen auf.

240 ist keine Zahl, die gewählt wurde, um zu beeindrucken. In diesem Spiel reichen Einhandwaffen von 50 bis 300, daher ist eine Frostklinge mit 240 ein teures Schwert und kein legendäres Schwert, und ein Spieler kann es sich ungefähr zu der Zeit leisten, in der er sich die guten Waffen leisten könnte, die der Schmied bereits verkauft. Wo sind die Spielnummern ist die Tabelle, die Sie sich ansehen sollten, bevor Sie eine Nummer auswählen. Ein Preis, an dem sich nichts befindet, ist eine Hypothese, und in einer Wirtschaft, die zwischen Städten Handel treibt, bleibt eine Hypothese nicht dort, wo man sie hinstellt.

4. Starten Sie das Spiel und öffnen Sie Mods im Hauptmenü. Ihr Paket erhält genau einen Status und Wurde es geladen? hat alle sechs.

5. Lesen Sie die folgende Zeile, um herauszufinden, was gelesen, beantragt und abgelehnt wurde, und geben Sie den Grund für jede Ablehnung an. Details anzeigen hat IDs.

6. Dein Schwert ist im Spiel. Alles, was danach kommt, ist mehr vom Gleichen.

Finden Sie es jetzt im Spiel

Der Bericht sagt applied. Das bedeutet, dass die Schallplatte geladen ist, und das ist nicht dasselbe wie davorgehen zu können. Hier hört jeder Reiseführer auf und jeder Autor beginnt zu raten.

Was hast du hinzugefügt?Wo es auftauchtDer Haken
goodsBei einem Händler fragt nur eine Zeile von vendor_inventories danach. Eine Ware, die niemand besitzt, ist geladen, hat einen Preis, ist vermarktbar, wie auch immer Sie sie nennen, und steht nirgendwo auf einem Ladentisch.Das Hinzufügen von Waren ist die halbe Arbeit. Die andere Hälfte ist die Linie.
vendor_inventoriesDer in npc_id genannte Händler. Jede Zeile trägt ihr eigenes daily_stock und ihr eigenes restock_days, sodass eine Zeile mit restock_days: 2 alle zwei Tage und nicht an dem Tag, an dem Sie sie hinzugefügt haben, aufgefüllt wird.Verwenden Sie day in der Konsole, um einen Tag zu überspringen, anstatt darauf zu warten.
itemsÜberall gibt dir etwas etwas: eine Händlerlinie, eine Beutetabelle, eine Questbelohnung. Ein Objekt, das nichts gewährt, existiert und kann nur mit item <id> in der Konsole erreicht werden.item northern_reach:frost_blade packt es sofort in Ihren Rucksack und ist so der schnellste Weg, um zu sehen, ob es geladen ist.
npc_definitionsDie in settlement_id angegebene Abrechnung an dem durch location_morning / location_afternoon / location_evening angegebenen Ort.Lesen Sie den folgenden Absatz über settlement_id, bevor Sie einen schreiben.
buildingsDie in settlement angegebene Abrechnung, gezeichnet mit dem von Ihnen angegebenen role und color. interior_service ist das, was ein Spieler vorfindet, wenn er es betritt.Ein Gebäude ohne settlement wird geladen und nirgendwo platziert.
poisAuf der Weltkarte bei world_position, erkennbar durch discovery_radius.Lesen Sie den Absatz über Koordinaten unten. Darum geht es allen.

settlement_id bezeichnet einen von den Autoren angelegten Ort. Siedlungs-IDs sind von den Autoren angelegt und stabil: Durnwall, Thorngate, Valdmere, Grentham und die zwölf Dörfer können alle benannt werden. Der Seed verändert das Gelände und die Biome darum, die Knappheit des Jahres und die politische Ordnung, nicht die ID. Wenn du eine Person an einem sicher besuchten Ort platzieren willst, verwende eine beliebige Autoren-Siedlungs-ID und führe den Namen in den Sprachdaten deines Pakets.

Koordinaten sind absolut, und die Welt wird um von den Autoren angelegte Orte erzeugt. Die Karte misst 61 440 × 34 560 Weltpixel, und Old Seat liegt in jeder Partie genau im Zentrum bei (30720, 17280). Die von den Autoren angelegten Städte und Dörfer behalten ihre Namen und Positionen. Der Seed verändert das Gelände und die Biome darum, die Knappheit des Jahres, die politische Ordnung und die Wege, die sich lohnen. Eine world_position von (6000, 2200) bleibt daher ein echter, stabiler Punkt im äußersten Nordwesten der Karte, während sich das in der Nähe Befindliche in jeder Partie ändert: Straße, Wald oder Niemandsland. Zwei ehrliche Verwendungen:

  • Immer noch in der Mitte. Ein interessanter Punkt, der ein paar tausend Pixel von (30720, 17280) entfernt ist, befindet sich in jedem Spiel in der Nähe des Alten Sitzes, also ist es ein Ort, den ein Spieler finden wird.
  • Du meinst Leere. Eine Ruine, an der seit hundert Jahren niemand vorbeigekommen ist, muss irgendwo sein. Dafür sind die absoluten Koordinaten genau richtig und der Seed entscheidet, welche Nachbarn er haben wird.

Die zeitsparendsten Konsolenbefehle. day [n] und hour [n] erhöhen die Zeit, sodass Sie ein Angebot sehen, ohne es zu erleben. item <id> [count] und gold <amount> legen die Dinge in Ihre Hände. flag, quest_start und faction_rep verschieben den Zustand, auf den eine Bedingung möglicherweise wartet. Es gibt keinen Teleportationsbefehl: Um an einen Ort zu gelangen, muss man dorthin reisen.

mod.json, Feld für Feld

FeldWas macht es?
idIm Beispiel oben. Der Name Ihres Pakets. Es muss genau mit dem Ordner übereinstimmen und ist das Wort vor dem Doppelpunkt in jeder von Ihnen geschriebenen ID.
nameIm Beispiel oben. Was ein Spieler sieht. Großschreibung und Leerzeichen sind hier in Ordnung.
versionIm Beispiel oben. Sie wählen es aus. Erhöhen Sie es jedes Mal, wenn Sie etwas ändern.
game_versionIm Beispiel oben. Der Build, für den Sie dies erstellt haben.
content_typesIm Beispiel oben. Die Familien, die Sie mitbringen. Eine in dieser Liste fehlende Familie wird nie gelesen, unabhängig davon, was sich im Ordner befindet.
dependenciesIm Beispiel oben. Die Pakete, die Sie benötigen. Ein Name oder ein Objekt mit optional: true.
load_orderIm Beispiel oben. Wer geht zuerst, wenn zwei Pakete dasselbe berühren? Der niedrigste wird zuerst geladen.
overridesIm Beispiel oben. Die Basisspiel-IDs, die Sie ändern möchten. Eine ID oder ein file.json:id, wenn Sie die Kopie meinen, die eine bestimmte Datei erstellt.
canon_safeIm Beispiel oben. Ob Ihr Mod in die Geschichte des Spiels passt. Das sagen Sie den Spielern, nicht das Spiel entscheidet.
rootsEin Familienordner, wenn Sie ihn an einem anderen Ort als dem Standard unter [Familien, eine nach der anderen] (#die-familien-eine-nach-einer) haben möchten. Bleiben Sie in Ihrem Paket.
manifest_versionWelche Art von Manifest schreiben Sie? Ändern, was das Spiel bereits hat Operationen erfordern 2. Dieser Build liest bis zu 2.
typeWas ist das für ein Paket? Der vierte Wert ist derjenige, der Verhalten anstelle von Daten sendet, und das Einzige in diesem Build, das Ja zum Ausführen von Verhalten sagt, sagt Nein, sodass ein Paket, das dies deklariert, abgelehnt wird. Es steht auf der Liste, weil die Form entschieden ist, nicht weil die Tür offen steht; Was ein Mod niemals tun kann ist die ehrliche Lektüre. Einer von content, overhaul, total_conversion, feature_extension.
capabilitiesWas für ein Paket würde der Gast verlangen, wenn die obere Etage jemals geöffnet wird. Ein unbekanntes Feld schlägt hier fehl, indem es geschlossen wird, anstatt ignoriert zu werden.
trust_tierNicht vertrauenswürdig, was ein von einem Spieler heruntergeladener Mod ist und bleibt. Es ist der eine Gast, der den anderen nominiert; Nichts, was ein Paket hier schreibt, fördert es. Einer von untrusted, trusted.
supersedesDie Pakete, die dadurch überschrieben werden sollen. Ein auf diese Weise beanspruchtes Feld wird nicht mehr als Kollision gemeldet. Auch hier schlägt das Schließen eines unbekannten Feldes fehl.
fallback_policyWorauf greift ein Paket zurück, wenn etwas, das es überschreibt, fehlt? Einer von vanilla, none.
campaignDie Kampagne, die eine Conversion hat.
campaign_packageErklären Sie, dass es sich bei diesem Paket um eine Kampagne mit eigener ID, eigenem Namen und eigener Version handelt. Ein Paket, das es enthält, wird nur gelesen, während die Kampagne läuft, und ein Spieler wählt es vor einem neuen Spiel im Mods-Bildschirm aus. Eine vollständige Conversion.

Eine Abhängigkeit kann ein Objekt anstelle eines Namens sein: {"id": "some_mod", "version": "", "optional": true}.

Ein Wert, der ein anderes Paket benennt, ist eine modübergreifende Referenz, und die Referenz muss eine deklarierte Abhängigkeit sein. Wenn diese Abhängigkeit optional ist, geben Sie dem Feld einen fallback, andernfalls wird der Datensatz übersprungen, wenn die Abhängigkeit fehlt:

a goods record

[
  {
    "op": "add",
    "id": "northern_reach:alloy",
    "display_name": "Alloy",
    "linked_item_id": "absent_helper:ore",
    "fallback": { "linked_item_id": "iron_ore" }
  }
]

Wohin jede Datei geht

where the files go

northern_reach/
  mod.json                  the label
  content/assets/images/
    images.json             your art
  content/inventory/items/
    blades.json             your first record
  content/narrative/quest_plans/
    the_long_winter.json    your quest

Namen und IDs

Eine ID besteht aus Kleinbuchstaben, Ziffern und Unterstrichen und nichts anderem. frost_blade, nicht Frost Blade, nicht frost-blade und nicht frost.blade. Es verfügt nicht einmal über ein eigenes Trennzeichen, da ein Trennzeichen innerhalb einer ID der Ordner ist, der in den Namen eindringt: Wenn Sie die Datei verschieben, stimmt die ID nicht mehr mit der Festplatte überein. Die oben genannten :s sind die einzige Ausnahme und beide Hälften folgen der Regel.

Der Teil vor dem Doppelpunkt ist Ihre Paket-ID. Auf diese Weise können zwei Mods beide eine Frostklinge hinzufügen, ohne dass es zu Konflikten kommt.

Wörter, die ein Spieler liest

Der in einem Datensatz geschriebene Text ist Text in einer einzigen Sprache. Zeigen Sie stattdessen auf einen Schlüssel:

a locale CSV

northern_reach.item.frost_blade.name
northern_reach.item.frost_blade.description

Die Schlüssel sind Kleinbuchstaben, durch Punkte verbunden, mit dem Namensraum als IDs. Bringt Wörter in die Familie locales – ein .csv unter content/locale mit einer Spalte key und einer Sprachspalte. Die Familien, eine nach der anderen hat die genaue Form.

Schreiben Sie außerdem das einfache display_name neben den Schlüssel. Eine Aufzeichnung, die nur einen Satz enthält, muss am Tag der Übersetzung von Hand umgeschrieben werden, und bis dahin sind es vierhundert.

Die beiden Möglichkeiten, etwas falsch zu machen, scheitern auf sehr unterschiedliche Weise, und nur eine davon sagt Ihnen das. Ein Schlüssel, der auf nichts reagiert, erscheint als der Schlüssel selbst – northern_reach.item.frost_blade.name, auf dem Bildschirm, absichtlich hässlich, damit jemand ihn reparieren kann, und wird als Loch gezählt. Ein Datensatz, der nur Text und keine Tasten enthält, erscheint nie: Er funktioniert in Ihrer Sprache für jeden Player in jeder Sprache. Nichts wird abgelehnt und nichts fehlt, es wird also nichts gemeldet, und ein Spieler, der auf Portugiesisch liest, liest still Ihr Italienisch. Du findest den ersten Fehler. Der zweite findet Ihre Leser.

Übersetze einen Mod und werde übersetzt

Das Spiel erscheint in sieben Sprachen, sodass ein Paket mit in die Aufzeichnungen integriertem Englisch für sechs Siebtel derjenigen, die es installieren, als Englisch gelesen wird. Dies ist der Preis, den es kostet, es zu vermeiden, was fast nichts ist, wenn Sie es am ersten Tag tun, und ein Umschreiben, wenn Sie es am vierhundertsten tun.

Die Sprachen, die es gibt

Sieben, und diese Tabelle wird aus dem Build gelesen und nicht hier handgeschrieben, sodass eine Sprache, die ankommt oder geht, sie am selben Tag verschiebt:

Schreiben Sie diesZungeSpaltenüberschrift
enEnglischendie Ausgangssprache
itItalienischit
frFranzösischfr
deDeutschde
esSpanisches
pt-BRPortuguês (Brasilien)pt_BR
zh-Hans简体中文zh_Hans

Bei zwei der Codes ist eine zweite Schreibweise im Umlauf – pt-BR ist diejenige, die eine digitale Storefront verwendet, und diese Seite, pt_BR, ist diejenige, der die Engine entspricht – und in einer Spaltenüberschrift werden beide akzeptiert. Schreiben Sie die, die Sie kopiert haben.

Tragen Sie Wörter in mehr als einer Sprache

Eine CSV unter content/locale, mit key an erster Stelle und einer Spalte pro Sprache:

a locale CSV

key,en,it,de
northern_reach:GOOD_FROST_SALT,Frost Salt,Sale di Brina,Frostsalz
northern_reach:ITEM_FROST_BLADE_NAME,Frost Blade,Lama di Brina,Frostklinge
RegelWarum
Jeder Schlüssel passt in Ihren Namespacenorthern_reach:GOOD_FROST_SALT, mit denselben Doppelpunkten, die die IDs verwenden. Ein Schlüssel von dort wird abgelehnt, es sei denn, overrides deklariert ihn – andernfalls würden zwei Pakete, die beide GOOD_GRAIN schreiben, stillschweigend durch die Ladereihenfolge aufgelöst.
Eine Spalte mit dem Namen einer Sprache, die das Spiel nicht unterstützt, wird abgelehntNicht ignoriert. Eine Kolonne, die der Lader lautlos fallen ließe, würde nichts bringen und man würde es von einem Spieler erfahren.
Eine leere Zelle ist keine AntwortEs wird eher übersprungen als gespeichert, sodass eine Sprache, mit der Sie noch nicht vertraut sind, im nächsten Schritt landet und nicht leer auf dem Bildschirm bleibt.
Niemals beidesEin Datensatz, der ein _key-Feld und eine wörtliche Zeichenfolge für dasselbe enthält, wird abgelehnt. Der Schlüssel ist das Versprechen; Die Zeichenfolge ist das, was der Schlüssel ersetzt hat.

Wenn auf einen Schlüssel keine Antwort in der Sprache des Spielers erfolgt, geht das Spiel eine feste Leiter hinunter: die Sprache des Spielers, dann die Sprache, in der Ihr Paket angeblich geschrieben wurde, dann der Spielekatalog und dann der Schlüssel selbst. Der letzte Schritt ist absichtlich hässlich: Ein ungelöster Schlüssel muss falsch aussehen, damit ihn jemand reparieren kann. Bei einer vollständigen Konvertierung wird der Spielekatalog übersprungen, denn das Auftauchen von Old Seat in einer Welt, die auf einem anderen Kontinent spielt, ist kein kleines Übersetzungsversehen, sondern das Basisspiel, das durchscheint.

Schreiben Sie Texte, die übersetzt werden können

  • Keine in Einzelteilen aufgebauten Sätze. Die Wortreihenfolge ist nicht in allen Sprachen gleich, sodass ein Name, der zur Laufzeit aus einer Spalte mit Adjektiven und einer Spalte mit Substantiven zusammengesetzt wird, auf Italienisch Oro Cervo ergibt. Für jede Sprache wurde ein Eintrag geschrieben, vollständig.
  • Der Name einer Person wird niemals übersetzt oder flektiert. Aldric ist in allen Sprachen Aldric. Das bedeutet auch, dass ein Schlüssel einen Namen nicht in einer schrägen Position platzieren darf – "of {name}", "{name}'s" –, da viele Sprachen Eigennamen ablehnen und das Spiel dies nicht tut.
  • Es gibt keine Zeichenbeschränkung, und das ist nicht dasselbe wie keine Beschränkung. Keine Felder zählen Zeichen; Was am Ende Platz auf dem Bildschirm ist. Deutsch ist etwa ein Drittel länger als Englisch und die Sprache, die den Ton angibt; der Chinese ist viel kürzer und tut es fast nie. Wenn Sie nur eine Übersetzung ausprobieren, versuchen Sie es mit Deutsch und geben Sie einer Bezeichnung die kürzeste Formulierung, die noch richtig ist.

Jemand, der Ihr Paket übersetzt

Fügt eine Spalte hinzu und sendet die Datei an Sie zurück. Der Arbeitsablauf ist vollständig, und deshalb ist das Format CSV und nicht etwas, das für Programmierer benutzerfreundlicher ist: Ein Übersetzer kann es in einer Tabellenkalkulation öffnen, und seine Tools lesen es bereits.

Zwei Dinge machen den Unterschied zwischen einem Paket, das übersetzt wird, und einem Paket, das nicht übersetzt wird. Schlüssel stabil halten – ein umbenannter Schlüssel ist eine verlorene Übersetzung, und der Übersetzer findet es heraus, wenn ein Spieler es herausfindet. Und sagen Sie, wozu eine Zeile dient: Ein Schlüssel namens NR_MSG_01 erhält eine Vermutung, während northern_reach:VENDOR_HERB_GREETING die Begrüßung eines Kräuterverkäufers erhält.

Wenn Sie das Paket eines anderen übersetzen, gelten für Sie dieselben Regeln: Die Spalten sind die Sprachen, die das Spiel trägt, die Schlüssel sind seine Schlüssel und nicht Ihre, und ein Name bleibt ein Name.

Ändern, was das Spiel bereits hat

Du willstBetriebWas brauchen Sie
Fügen Sie etwas Neues hinzuaddIhre eigene ID mit Ihrem eigenen Namensraum. Sonst nichts.
Schreiben Sie einen der Rekorde des Spiels neureplaceDie in overrides aufgeführte Datensatz-ID. Eine vollständige Aufzeichnung: Es erbt nichts.
Ändern Sie ein Feld und lassen Sie den Rest in Ruhepatchoverrides, plus "manifest_version": 2 in mod.json.
Einen Datensatz zurückziehenremoveoverrides und eine Familie, die ihn aufnimmt. Siehe Etwas herausnehmen.

part of mod.json

"overrides": ["iron_sword"]

overrides ist ein Versprechen. Ein Datensatz, der auf einer ID landet, die Sie nicht deklariert haben, wird abgelehnt, sodass Sie niemals stillschweigend etwas ändern können, von dem ein Spieler nichts wusste.

a goods record

[
  {
    "op": "patch",
    "id": "iron_ore",
    "changes": [
      { "op": "set", "field": "base_price", "value": 14 }
    ]
  }
]
BetriebWas macht es?ErfordertVerweigern
addStellen Sie einen neuen, vollständigen Datensatz unter Ihrem Namensraum bereit.ID mit Namespaceeine ID, die bereits existiert, unabhängig davon, ob sie aus dem Basisspiel oder einem anderen Mod stammt
replaceStellen Sie einen vollständigen Datensatz für eine bereits vorhandene ID bereit, nachdem Sie diese deklariert haben.Überschreiben deklariert, Aufzeichnung abgeschlosseneine ID, die in der Registrierung fehlt, und eine ID, die im Manifest nicht unter overrides aufgeführt ist
patchÄndern Sie benannte Felder eines vorhandenen Datensatzes und lassen Sie den Rest in Ruhe.Deklarierte Überschreibung, Änderungeneine in der Registrierung fehlende ID, ein Feld, das die Familie nicht zulässt, und jede Form der Änderung außerhalb von patch_operations
removeZiehen Sie einen vorhandenen Datensatz zurück und hinterlassen Sie an seiner Stelle einen Grabstein.deklarierte außer Kraft gesetzte, entfernbare Familieeine im Register fehlende ID und jede Familie, die unten nicht als entfernbar markiert ist

Ein Patch benennt seine Änderungen einzeln:

  • set – Schreibt value in field, was auch immer vorher dort war. Es ist mit field und value geschrieben.
  • unset – Entfernt field aus dem Datensatz, sodass der Leser den Standardwert der Familie sieht. Es wird mit field geschrieben.
  • append_unique – Fügt value zur Liste in field hinzu, falls es noch nicht vorhanden ist. Es ist mit field und value geschrieben.
  • remove_value – Entfernt jedes Vorkommen von value aus der Liste in field. Es ist mit field und value geschrieben.
  • Benennen Sie ein Feld nach Pfad, niemals nach Standort. tags.0 wird abgelehnt. Das heutige dritte Label ist das zweite Label, nachdem Sie den Mod einer anderen Person hochgeladen haben.
  • Ein Pfad besteht aus bis zu vier durch Punkte verbundenen Kleinbuchstaben. Alles, was einen Operator enthält, wird abgelehnt.
  • append_unique ist derjenige, den sich zwei Mods teilen können. Wenn beide dasselbe Label in die Warteschlange stellen, handelt es sich nicht um einen Konflikt und es verdoppelt sich nicht.

Nur manchmal

Eine Aufzeichnung kann Ihnen sagen, wann es sich lohnt. Fügen Sie einen when neben dem op in einem Paket mit "manifest_version": 2 hinzu:

a presentation_bindings record

{
  "op": "add",
  "id": "my_mod:snowy_cloak",
  "subject": "wool_cloak",
  "kind": "item",
  "slot": "icon",
  "cue": "my_mod:cloak_snowy",
  "when": { "season": { "is": "winter" } }
}

Es gibt keinen Operator und nichts zu berechnen. Alles, was eine Bedingung sagen kann, finden Sie in diesen beiden Tabellen.

Fragen Sie nachEntschiedenBeweisWerte
packagesbeim Ladenall_of, none_ofMod-IDs, die neben deinen hochgeladen wurden
campaignbeim Ladenis, any_of, not_any_ofdie Kampagne, von der aus das Spiel begann
localebeim Ladenis, any_of, not_any_ofdie Sprache, in der Sie spielen
seasonbeim Spielenis, any_of, not_any_ofspring, summer, autumn, winter
weatherbeim Spielenis, any_of, not_any_ofeine Angabe des Wetters, dass das Spiel gelaufen ist
day_phasebeim Spielenis, any_of, not_any_ofdawn, day, dusk, night
daybeim Spielenat_least, at_mostWie viele Tage dauerte das Spiel?
VersuchDauertWahr, wenn
isein NameDie Antwort ist genau das
any_ofeine ListeDie Antwort ist eine davon
not_any_ofeine ListeDie Antwort ist keines davon
at_leasteine ZahlDie Antwort ist das oder höher
at_mosteine ZahlDie Antwort lautet: oder niedriger
all_ofeine Listesie sind alle da
none_ofeine Listeda ist niemand

Maximal vier Probanden in einem when, zwei Versuche pro Proband. Zwei Versuche zum gleichen Thema bilden ein Intervall: { "day": { "at_least": 10, "at_most": 30 } }.

Welche Familie nimmt was. Jede Familie nimmt die drei, die beim Laden festgelegt wurden. Nur presentation_bindings und effects übernehmen die vier, die sich während des Spiels bewegen, da nur diese beiden neu aufgebaut werden, wenn sich die Welt verändert. Die Nominierung von season an anderer Stelle wird abgelehnt und in der Nachricht steht, welche Themen diese Familie wirklich annimmt.

Der Grund sind die Rettungsaktionen. Ein Datensatz, der über einen Gegenstand, eine Person oder eine Mission entscheidet, muss beim nächsten Laden derselbe Datensatz sein, und eine Bewegungsbedingung ist genau das, was ihn daran hindert.

Ein saisonaler Skin geht auf den Link, nicht auf das Bild. Bringen Sie das Bild nur einmal mit, dann zwei presentation_bindings-Datensätze für sie: einen mit einem when, einen ohne. images, audio und fonts lehnen einen when ohne Diskussion ab.

Zurückgehalten wird nicht abgelehnt. Eine Bedingung, die nicht erfüllt ist, behält ihren Datensatz und der Ladebericht nennt ihn namentlich:

what the game prints back

WITHHELD my_mod:snowy_cloak from my_mod: season is winter, and it is spring

Ein Paket mit fünfzig Saisonrekorden ist jederzeit zu drei Vierteln gehalten. Es ist das Paket, das funktioniert.

Wenn eine bedingte Darstellungszuordnung verweigert wird, zeigt der Bericht die Familie weiterhin wie deklariert an und gibt bound=0 zusammen mit jeder WITHHELD-Zeile aus. meldet das Paket nicht fälschlicherweise als ohne Präsentationsfläche. Wenn keine unbedingte Bindung denselben Slot bereitstellt, wird auch NO_APPLICABLE kind/subject/slot mit der unbeantworteten Bedingung ausgegeben, was bedeutet, dass „in diesem Weltzustand nichts zutrifft“ und nicht „der Datensatz war ungültig“. Testen Sie die Bedingung in der Host- oder Laufzeitspur mit dem entsprechenden Weltstatus, bevor Sie davon ausgehen, dass die Zuordnung abgelehnt wurde.

Zwei Versionen derselben Sache. Bringt zwei add-Datensätze mit derselben ID und unterschiedlichen Bedingungen. Derjenige, dessen Zustand gilt, ist derjenige, der anklagt. Wenn beides zutrifft, wird das zweite als Duplikat abgelehnt. Auf diese Weise werden überlappende Bedingungen gemeldet, anstatt durch die Aktenordnung gelöst zu werden.

Etwas entfernen

remove bedeutet eingestellt, nicht nicht mehr vorhanden. Der Rekord löst sich immer weiter auf und wird markiert: Es wird nichts Neues mehr angeboten, vorrätig gehalten, hergestellt oder von ihm erzeugt, und alles, was ein Spieler bereits hat und der ihn nennt, liest weiterhin genau das, was er immer gelesen hat.

FamilieremoveWas geschieht
goodsJaZurückgezogen. Es löst immer noch nach der Identität, weg von dem, was das Spiel bietet.
vendor_inventoriesJaAbgesagt. Die Zeile wird entfernt.
alles andereNEINAbgelehnt, mit Grund.

a goods record

{ "op": "remove", "id": "iron_ore" }

vendor_inventories ist die einzige Familie, die den Datensatz entfernt, und zwar nur, weil die Speicherregeln bereits besagen, dass niemand auf diese Zeile zeigt.

Ein remove kann keinen when tragen. Ein Rückzug, den eine Rettung benennen könnte, muss entschieden werden, sonst wird ein Ausweis an einem Abend geklärt und am nächsten nicht.

Eine Entfernung ist für eine Komposition dauerhaft. Ein nachfolgender patch, replace oder zweiter remove, der auf die zurückgezogene ID abzielt, wird abgelehnt, auch wenn ein Warenrückruf den alten Datensatz durch seine dauerhafte Entfernung lösbar hält. Dadurch wird verhindert, dass der Speicherbericht „zurückgezogen“ anzeigt, während ein nachfolgendes Paket dazu führt, dass sich der Datensatz wieder wie bereitgestellt verhält. Fügen Sie eine neue Namespace-ID hinzu, wenn Sie einen neuen Datensatz benötigen. Verlassen Sie sich nicht auf eine Entfernung, gefolgt von einer stillen Auferstehung.

Wenn zwei Mods dasselbe wollen

Beide laden. Jede Änderung wird komponiert, bevor etwas erstellt wird, sodass das Spiel beides sieht.

Was für ZusammenstößeWas geschieht
Verschiedene Felder desselben DatensatzesEs gilt beides. Nichts geht verloren.
Das gleiche einfache FeldGewinnt später den load_order, und ein nicht deklarierter Zusammenstoß ist ein Fehler: undeclared_collision, und die Zusammensetzung stimmt nicht.
Zwei Pakete, die den gesamten Datensatz bereitstellenDas gleiche. Der Gewinner wird am load_order ermittelt und der Plan lehnt immer noch ab, bis ihn jemand bekannt gibt.
Dieselbe Liste mit append_unique / remove_valueKeine Konflikte. Beide sagen, was die Liste enthalten soll, nicht was sie sein sollte.
Ein Paket zieht einen Datensatz zurück, ein anderes ändert oder ersetzt ihnDer Rückzug bleibt bestehen. Die spätere Operation wird unabhängig von der Ladereihenfolge abgelehnt.
Zwei Pakete, die das gleiche Thema behandelnDer Ladeauftrag gewinnt später, der Verlierer wird im Bericht genannt.
Ein Paket, das den Inhalt eines anderen Pakets verschönertRefused.

Gewinnen und die Erlaubnis zu bekommen sind zwei verschiedene Fragen, und das ist das Überraschende daran. Das Spiel berechnet immer, welches Paket es zuletzt schreibt – wenn man es dem Zufall überlässt, würde selbst ein Münzwurf zur Ablehnung führen – und markiert das Paar trotzdem als Kollision, die niemand erklärt hat. Der Offline-Validator lehnt dasselbe Paar ohne Diskussion ab, sodass Sie es vor einem Spieler herausfinden.

supersedes in Ihrem Manifest ist Ihre Art zu sagen, dass Sie es mit Absicht getan haben. Nennen Sie die ID des anderen Pakets und der Konflikt wird zu declared_replacement: registriert, mit Grund und kein Fehler mehr.

Geben Sie Ihrem Paket ein eigenes load_order. Zwei Pakete, die eine Nummer teilen, werden nicht abgelehnt, und dann fällt der Gewinner aus der alphabetischen Reihenfolge der Mod-ID: eine Reihenfolge, die keiner der Autoren gewählt hat und die kein Spieler auf dem Bildschirm lesen kann.

Bilder, Ton, Schrift, Farbe

Eine Datei mitzubringen und sie zu verwenden sind zwei separate Schritte und Sie benötigen beide. Eine Datei, auf die nichts verweist, wird gelesen, geprüft, gemessen und nie angezeigt.

TypDateiInstalliertWas bedeutet es
image.png, .webpJaDie Datei wird gelesen und die Textur erstellt.
audio.ogg, .wavNEINDie Deskriptoren werden validiert, der Header wird gelesen und die Dauer begrenzt, und nichts erklingt: Keine Inhaltsfamilie trägt Audio und die Audiofunktionalität fragt keinen Katalog nach einem Paketsound. Bringen Sie den Ton mit, wenn die Familie existieren wird; Heute würde er gemessen und still sein.
font.ttf, .otfNEINDeskriptoren werden validiert und die Sprachabdeckung überprüft, und kein Thema löst einen Paketcharakter auf. Die Schnittstelle erstellt ihre Schriftarten aus dem mitgebrachten Thema, sodass eine von einem Paket bereitgestellte Schriftart überprüft und nicht auf etwas gesetzt wird.

Bringen Sie die Akte mit

Jede Ressourcenfamilie ist ein Dateideskriptor und die von ihm benannten Dateien. Der Deskriptor muss wie seine Familie benannt werden: images.json, audio.json, fonts.json.

where the files go

content/assets/images/
  images.json
  river_guard.png
FamilieOrdnerAkzeptierenPflichtfelder
imagescontent/assets/images.png, .webpid, file, format
audiocontent/assets/audio.ogg, .wav (unkomprimiert)id, file, codec, role
fontscontent/assets/fonts.ttf, .otfid, file, format, sizes, covers, fallback_font
themescontent/assets/themesFarbtokenid, tokens
effectscontent/assets/effectsHost-Modelleid, template

a images record

[
  {
    "id": "northern_reach:river_guard",
    "file": "river_guard.png",
    "format": "png"
  }
]

Drei Regeln, die beißen:

  • Der Header wird überprüft, bevor er von irgendetwas dekodiert wird. format ist das, was die Datei ist, nicht das, was die Erweiterung behauptet.
  • Ein Name von file, der .. oder ~ enthält oder mit /, \, res:// oder user:// beginnt, wird für den Namen abgelehnt.
  • Eine ID, die nicht aufgelöst wird, erhält einen Platzhalter und eine Warnung, niemals Stille.

Wetten Sie darauf

Auf einem Datensatz, den Sie bei sich tragen, mit einem Feld, das Ihre Bild-ID annimmt:

FamilieFeldWas ist das
itemsicon_idDas Symbol auf einem Gegenstand, den Sie tragen.
npc_definitionsportrait_idDas Porträt eines NPCs mit einem Namen.
perksiconDas Symbol eines Privilegs.

Auf alles, einschließlich Basisspielinhalten, mit einem presentation_bindings-Datensatz, der das Thema, seinen Typ und seinen Slot benennt:

a presentation_bindings record

[
  {
    "id": "northern_reach:iron_sword_icon",
    "subject": "iron_sword",
    "kind": "item",
    "slot": "icon",
    "cue": "northern_reach:river_guard",
    "alternative_key": "northern_reach_iron_sword_icon_alt"
  }
]
SpielautomatenDu trägstWo es erscheintalternative_keyGezogen
portraitimageDer Rahmen des Dialogs für die ID des Sprechers.obligatorischJa
spriteimageEin Truppenmarker, ein Weltkartengelände oder ein Gebäude in einer Siedlung.Ja
iconimageInventarzellen für jeden Gegenstand – Ihren oder den des Spiels.obligatorischJa
bannerimageDie Hausfarben auf seiner Tagebuchseite.Ja
voiceaudioEs ertönt, wenn die Zeile des Sprechers erscheint.obligatorischnoch nicht
use_soundaudioErtönt, wenn ein Gegenstand verwendet wird und die Verwendung wirksam geworden ist.noch nicht
ambienceaudioEs dreht sich, während der Spieler auf diesem Gelände steht.noch nicht
themethemeWelche Ihrer Paletten trägt die Schnittstelle?Ja
fontfontWelcher Ihrer Charaktere trägt das Interface?noch nicht
effecteffectWetter und Licht auf dem Boden, mit dem es verbunden ist.Ja

alternative_key ist obligatorisch, wenn ein Slot Informationen enthält: Es ist der Sprachschlüssel, der einem Spieler, der das Bild nicht empfangen kann, dasselbe sagt.

Klang

role ist ein Limit, keine Bezeichnung: Jedes hat seine eigene maximale Dauer, seine eigene Obergrenze dafür, wie viele zusammen spielen, und den Cursor, nach dem ein Spieler sucht.

RolleFürCursor
musicLiederMusik
ambienceRäume, Zeit, OrteUmfeld
sfxKurze EffekteEffekte
voiceGesprochene WitzeEffekte

Ein komprimiertes WAV wird abgelehnt: Für die Dekodierung ist ein Parser erforderlich, und der Parser ist genau das, was Sie vermeiden möchten.

Schriften

covers benennt die Sprachen, für die Ihre Schriftart Glyphen enthält, und der Build weigert sich, sie für alle anderen zu installieren. Ein Zeichen, dem eine Sprache fehlt, scheitert nicht: Zeichnen Sie kleine Quadrate, und der Bildschirm liest sich wie eine halbfertige Übersetzung, mit dem richtigen Text und dem Fehler der Schriftart.

fallback_font ist obligatorisch: Benennen Sie eine andere eigene Schriftart-ID oder eine Systemfamilie (Segoe UI, Noto Sans). sizes ist das, worauf der Glyphen-Cache berechnet wird.

Nur ein Zeichen, niemals eine Sammlung – ein .ttc enthält mehrere und welches ankommt, hängt von einem Index ab, den der Deskriptor nicht tragen kann. Kostenlose Schriftarten mit großer Abdeckung: Google Fonts, Font Squirrel. Überprüfen Sie, ob die Lizenz Ihnen die Weiterverbreitung der Datei erlaubt – Ihr Paket enthält sie.

Farbe

Tokens, niemals eine Szene, ein Skript oder ein Ressourcenpfad. Die Namen sind die des Spiels: bg_deep, bg_mid, bg_button, bg_hover, border, border_hi, text, text_dim, accent, gold. Ein Name, den dieser Build nicht kennt, wird im Protokoll erwähnt, anstatt dort zu stehen und den Anschein zu erwecken, dass er angewendet wird.

a themes record

[
  {
    "id": "northern_reach:dusk",
    "tokens": {
      "bg_deep": { "kind": "colour", "value": "#12131a" },
      "text": { "kind": "colour", "value": "#e8e2d0" },
      "border": { "kind": "colour", "value": "#7f6ab0" }
    },
    "contrast_pairs": [
      { "text": "#e8e2d0", "background": "#12131a" }
    ]
  }
]

contrast_pairs werden bei einem Verhältnis von 4,5 und darunter überprüft, dass das Thema abgelehnt wird. Das WebAIM-Messgerät zeigt Ihnen das Verhältnis eines Paares an, bevor Sie es tragen.

Schalten Sie das Paket aus und die Schnittstelle erhält ihre Farben und Schriften zurück.

Kunst, die sich gut anfühlt

Der Build prüft, ob ein Bild ein Bild ist. Es sagt nichts darüber aus, ob es richtig aussieht, und in einer in Grautönen gezeichneten Welt hört ein helles, fröhliches, hochauflösendes Schwert nicht auf, falsch zu sein, indem es jeder Prüfung standhält. Das ist heute bekannt.

Das RegisterPixelkunst, grau und nicht sehr heroisch. Stumpf, abgenutzt, von der Zeit befleckt. Eine Palette, die zu einem regnerischen Nachmittag in einer Stadt passt, die ein schlechtes Jahr hinter sich hat.
Dübel16 Pixel für alles, was in einer Karte gezeichnet wird. Ihre Karten.
Formate und Einschränkungen.png oder .webp, bis zu 8192 pro Seite, bis zu 8 MB, gesteuert durch den Header, bevor sie von irgendetwas dekodiert werden.
SchnittstellenfarbeDie zehn Token von themes und ein contrast_pairs-Verhältnis von 4,5, unterhalb dessen das Thema abgelehnt wird.

Der vollständige Styleguide ist noch nicht veröffentlicht. Was es bringen wird: die Palette selbst, die Dimensionen, in denen jede Art von Dingen gezeichnet wird, und nebeneinander liegende Beispiele dafür, was in die Welt kommt und was aus ihr herauskommt. Es lohnt sich, darauf zu warten, anstatt zu raten, denn der Fehler, den es verhindert, ist keine abgelehnte Datei: Es ist ein Paket, das perfekt installiert wird und dem Spiel das Gefühl gibt, zwei Spiele zu sein.

Solange es nicht existiert, ist die zuverlässige Methode die, die keine Dokumente benötigt: Legen Sie Ihr Bild neben das Spielbild und schauen Sie sich beide zusammen an.

Ihre Karten

Zeichnen Sie in Gekachelt,, exportieren Sie es nach .tmj und indizieren Sie es nach content/world/maps/maps.json.

a maps record

[
  {
    "id": "northern_reach:river_bend",
    "file": "river_bend.tmj",
    "name_key": "NORTHERN_REACH_RIVER_BEND",
    "world_origin": [4096, 2560],
    "region_id": "northern_reach:lowlands"
  }
]
RegelWas bedeutet es
Der Bausatz16 Pixelkacheln, orthogonal, rechts unten, fertig.
Ebenen sind Rollen, keine Namenground, collision und walkable sind obligatorisch. Eine Ebene namens collisions wird abgelehnt und nicht ignoriert.
Geometrie erklärt sich selbstDer Kollisions- und Laufbereich sind von Ihnen gezeichnete Objekte, die nie aus dem Aussehen der Kacheln abgeleitet werden können.
Jeder Objektname hat seinen eigenen Namensraumnorthern_reach:towpath, nicht towpath.
world_originWo ist Ihre obere linke Ecke, in Weltpixeln? Dies wird angegeben, weil eine Kartendatei keine Ahnung hat, wo sie sich in der Welt befindet.
Eine Karte sagt wo, nie wasEin poi-Objekt auf der Ebene bindings benennt einen Punkt von Interesse, den Sie als Datensatz mitgebracht haben. Die Anordnung verschiebt es an die Stelle, an der Sie es gezeichnet haben.
Alles oder nichtsEine abgelehnte Bestimmung stellt absolut nichts dar.
Keine RoutenEine Eigenschaft namens path, scene, script, resource oder template wird für den Namen abgelehnt, unabhängig davon, was sie enthält.

Ein Link, der Inhalte aus einem anderen Paket – oder dem Basisspiel – nennt, führt dazu, dass das gesamte Layout abgelehnt wird. modding_map_report benennt die Bestimmung und die Regel, die sie abgelehnt hat.

Ihre Missionen

Eine Mission ist eine Reihe von Datensätzen, die in content/narrative/quest_plans nur zusammen einen Sinn ergeben.

TypWas ist das
arcDie Geschichte. Listet die darin enthaltenen Missionen auf.
questDie Aufgabe: Wer gibt es, wie heißt es, wie viel zahlt man?
objectiveEine Sache muss der Spieler tun.
endingWie der Bogen endet.

a quest_plans record

[
  {
    "kind": "arc",
    "id": "northern_reach:the_long_winter",
    "stages": ["northern_reach:bring_the_grain"]
  },
  {
    "kind": "quest",
    "id": "northern_reach:bring_the_grain",
    "name_key": "northern_reach.quest.bring_the_grain.name",
    "giver": "northern_reach:the_reeve",
    "in_arc": "northern_reach:the_long_winter",
    "objectives": ["northern_reach:gather_grain"],
    "rewards": [
      { "grant": "receive_coin", "coin": 250 }
    ]
  },
  {
    "kind": "objective",
    "id": "northern_reach:gather_grain",
    "quest": "northern_reach:bring_the_grain",
    "goal": "collect_item",
    "target": "northern_reach:winter_grain",
    "count": 40
  },
  {
    "kind": "ending",
    "id": "northern_reach:the_barns_are_full",
    "arc": "northern_reach:the_long_winter",
    "requires": ["northern_reach:bring_the_grain"]
  }
]
ObjektivHeute angeschaut
collect_itemja – du trägst genug von etwas
defeat_unitja – du hast genug von irgendetwas getötet
earn_coinja – du hast genug Geld
reach_placeja – Sie haben eine Siedlung besucht
survive_daysja – es sind genug Tage vergangen
speak_to, deliver_item, defend_place, escort_unit, learn_lorenein – namentlich abgelehnt statt angenommen und dann nie abgeschlossen
BelohnenHeute geliefert
give_item, receive_coinJa
change_relationja, wenn das Subjekt der Spieler ist
die anderen fünfweigerte sich lautstark
  • Bei einem Plan geht es um alles oder nichts. Ein falscher Rekord und keiner wird installiert: Die Alternative ist ein Bogen, der auf halbem Weg stoppt und der Spieler das Schwert und nicht den Titel hält.
  • Eine Belohnung ist ein grant, niemals ein kind. kind gibt an, um welchen der vier Datensätze es sich handelt. Eine mit kind geschriebene Belohnung liest sich sehr gut und wird abgelehnt.

Überprüfen Sie Ihre mit modding_quest_plan_report.

Ihre Gespräche

Eine Konversation besteht aus drei Arten von Datensätzen in content/narrative/dialogue: dem dialogue_graph, der sie benennt und angibt, in welcher Leiste sie geöffnet wird, den dialogue_node-Balken, bei denen es sich um die Zeilen handelt, und den dialogue_option-Auswahlmöglichkeiten darüber.

Ihre Zeile ist Ihre Zeile, und nichts schreibt sie um. Ein lokales Modell kann eine Frage beantworten, die der Spieler an den Charakter schreibt, und dabei innerhalb dessen bleiben, was Ihre Zeile sagt – und wenn es nicht darin bleiben kann, sagt es, dass es es nicht weiß. Es ist der Spieler, der entscheidet, ob diese Oberfläche überhaupt existiert; Bei ausgeschaltetem Modell sagt die Figur Ihren Satz und stoppt. Die Übersetzung Ihres Witzes stammt wie alles andere, was Sie schreiben, aus den Sprachdateien.

Das Diagramm nennt speaker, und der Auslöser ist vollständig vorhanden. Wenn Sie darauf klicken, fragt jeder Charakter im Spiel diese Familie, welche Gespräche über ihm laufen, sodass Sie dem Schmied etwas zu sagen geben können, ohne den Schmied neu zu definieren.

a dialogue record

[
  {
    "kind": "dialogue_graph",
    "id": "northern_reach:gate_toll",
    "entry": "northern_reach:gate_open",
    "speaker": "gate_warden",
    "name_key": "TALK_PACK_GATE"
  },
  {
    "kind": "dialogue_node",
    "id": "northern_reach:gate_open",
    "graph": "northern_reach:gate_toll",
    "voice": "line",
    "speaker": "gate_warden",
    "line_key": "TALK_PACK_GATE_OPEN"
  }
]

Sie schreiben das Gespräch, niemals die Worte: Jeder Witz ist ein Sprachschlüssel, sodass das gleiche Paket in allen Sprachen gelesen werden kann, die der Spieler hat. Ein Paket mit Prosa wird in die Datei statt auf den Bildschirm zurückgewiesen.

Ein Witz und eine Wahl können jede der Bedingungen beinhalten, und eine Wahl kann Befehle beinhalten. Eine Bedingung entscheidet darüber, ob das Ding dem Spieler überhaupt gezeigt wird; Ein Befehl ist das, was passiert, wenn er ihn annimmt.

ÜberprüfenDauertEr fragtHeute beantwortet
companion_presentcompanionDieser Begleiter ist da, um es zu hören.Ja
faction_stancefaction, stanceEine Fraktion steht dort, wo die Option es erwartet.ja, für hostile – jeder andere Wert wird vor der ersten Kennzahl abgelehnt
has_coincoinDer Spieler kann es sich leisten.Ja
has_itemitem, countDer Spieler trägt es bei sich.Ja
has_knowledgeloreDem Spieler wurde dies mitgeteilt.Ja
has_traittraitDer Player wurde so gebaut.Ja
lacks_knowledgeloreDem Spieler wurde dies noch nicht mitgeteilt.Ja
quest_statequest, stateEine Mission ist dort, wo die Option erwartet.Ja
relation_at_leastsubject, target, regardDie eine Seite denkt zumindest das von der anderen.Ja
seasonseasonWir sind in diesem Teil des Jahres.Ja
time_of_dayphaseWir sind in diesem Teil des Tages.Ja
BefehlDauertVorHeute erledigt
change_relationsubject, target, deltaVerändere einen Rufwert innerhalb der veröffentlichten Beziehungsregeln des Hosts.Ja
give_itemitem, countLiefern Sie etwas.Ja
grant_knowledgeloreSagt dem Spieler etwas.Ja
open_shopvendorBringt die Vorräte eines Händlers auf den Bildschirm.Ja
pay_coincoinDer Spieler zahlt.Ja
receive_coincoinDer Spieler wird bezahlt.Ja
recruit_companioncompanionFüge jemanden der Gruppe hinzu, wenn die veröffentlichten Rekrutierungsregeln des Hosts es erlauben.Ja
set_quest_statequest, stateBringen Sie eine Mission in einen Zustand, den seine Akte zulässt.ja, für active und failed – jeder andere Wert wird vor der ersten Kennzahl abgelehnt
start_combatencounterSchließt das Gespräch.Ja
take_itemitem, countEs nimmt etwas weg.Ja
travel_todestinationBewegen Sie das Unternehmen.Ja
  • Eine Konversation, die etwas benennt, was dieser Build nicht kann, wird nie geöffnet. Nicht die Auswahl, die sie verwendet: die gesamte Konversation vor ihrer ersten Zeile. Eine Diskussion, die bei der dritten Option endet, hat dem Spieler bereits die Münzen genommen.
  • Nichts bewegt sich mehr als da ist. Fragen Sie zuerst mit has_coin oder has_item; Ein Paket, das es vergisst, kann den Spieler nicht auf minus vierzig Münzen bringen, weil niemand eine Schuld angenommen hat und kein Bildschirm eine erklärt.
  • Jeder Witz braucht einen Ausweg. Ein Witz, zu dem ein Spieler gelangen und dem er nicht entkommen kann, wird abgelehnt, wenn die Grafik geladen wird.

Überprüfen Sie Ihre mit modding_dialogue_report.

Deine Szenen

Eine Szene ist der einzige Inhaltstyp, der dem Spieler die Kontrolle entzieht, und daher ist sie auch die einzige mit einer Endregel. Die Szenen leben in content/narrative/scenes und jede benennt einen where, den Ort, an dem sie abgespielt wird. Betreten Sie diesen Ort und die Szene beginnt.

a scenes record

[
  {
    "id": "northern_reach:the_morning_after",
    "where": "northern_reach:waystation",
    "beats": [
      { "beat": "fade_in", "seconds": 1.5 },
      { "beat": "lock_player" },
      { "beat": "say", "actor": "gate_warden", "line_key": "SCENE_PACK_GREETING" },
      { "beat": "wait", "seconds": 1.0 },
      { "beat": "unlock_player" }
    ]
  }
]
WitzDauertMalHeute gespielt
ask_nameprompt_keyDie Szene erwartet sieJa
endDie Szene geht weiterJa
fade_insecondsDie Szene erwartet sieJa
fade_outsecondsDie Szene erwartet sieJa
lock_playerDie Szene geht weiterJa
narrateline_key, secondsDie Szene erwartet sieJa
play_cuecueDie Szene geht weiterJa
remove_actoractorDie Szene geht weiterJa
sayactor, line_keyDie Szene erwartet sieJa
show_exitDie Szene geht weiterJa
start_dialoguegraphDie Szene erwartet sieJa
unlock_playerDie Szene geht weiterJa
waitsecondsDie Szene erwartet sieJa
walk_toactor, anchorDie Szene erwartet sieJa
  • Eine Szene, die Kontrollen entfernt, muss sie zurückgeben. Eine Sequenz, die ohne unlock_player endet, wird abgelehnt, da die Alternative darin besteht, einen Raum zu schaffen, den der Spieler nur durch Beenden des Spiels verlassen kann.
  • Zeilen folgen der Reihe nach und es wird eine Blockierungslinie erwartet. Dies macht eine Szene zu einer Szene und nicht zu einer Liste von Dingen, die auf einmal passieren.

Überprüfen Sie Ihre mit modding_scene_report.

Deine Screenshots

Das Layout eines Bildschirms gibt Aufschluss darüber, welche Abschnitte sich in welchem ​​Bereich eines Bildschirms befinden, über den das Spiel bereits verfügt, und in welcher Reihenfolge. Es legt die Teile dar, die dieser Build zeichnet. Er kann keinen hinzufügen, weil ein Abschnitt, den niemand geschrieben hat, nichts zu zeichnen hat.

Die Bestimmungen befinden sich in content/ui/screens. Die Familien, eine nach der anderen verfügt über Felder und einen Datensatz zum Kopieren.

Überprüfen Sie Ihre mit modding_screen_report.

Nichts erschien

Lesen Sie zuerst den Status auf dem Mod-Bildschirm. Fast jeder Staat benennt das Problem offen, auf der Linie, und auch der häufigste Fehler von allen: der, der einst ganz oben auf dieser Liste stand.

Die Familie fehlt in content_types. Sie schreiben goods.json, vergessen "goods" in der Manifestliste und der Ordner wird nie geöffnet: Es wird nichts abgelehnt, da nichts gelesen wurde. Das Paket wird leer geladen. Jetzt erfahren Sie auf dem Bildschirm, welche Datei durchlaufen wurde und was hinzugefügt werden muss:

what the game prints back

content/economy/goods/goods.json was not read — add "goods" to content_types in mod.json

Der Offline-Validator gibt denselben Satz aus, sodass die beiden nicht anderer Meinung sein können. Gehen Sie diese Liste nur durch, wenn in der Zeile „geladen“ steht und keine ungelesenen Dateien aufgeführt sind. Die Reihenfolge richtet sich danach, wie oft jeder der Täter ist.

#SymptomWas der Validator sagt
1Der Ordnerpfad ist falschWARN: declared goods root missing: …/content/economy/goods. Eine Warnung, kein Fehler: Das Paket wird trotzdem bestanden, und deshalb ist --strict vor dem Posten der Ratschlag, den es gibt. Familien, eine nach der anderen enthält den genauen Ordner für jede Familie.
2Die ID hat keinen DoppelpunktERROR: add needs an id under your own namespace. frost_blade wird abgelehnt; northern_reach:frost_blade wird akzeptiert.
3Der JSON ist defektERROR: invalid json goods.json: Expecting ',' delimiter: line 6 column 5. Ein fehlendes Komma macht die gesamte Datei unlesbar und Ihnen wird die Zeile mitgeteilt.
4Die Datei befindet sich im falschen PaketDie gleiche Nachricht wie n. 2. Eine ID mit dem Namensraum einer anderen Person darf nicht von Ihnen geschrieben werden, und die Prüfung kann sie nicht von einem Tippfehler unterscheiden: Sie weiß nur, dass das Präfix nicht Ihre Paket-ID ist.
5Ein erforderliches Feld fehltDer Bericht nennt es – für die Felder, die eine Familie tatsächlich benötigt, die weniger sind, als Sie sich vorstellen können. [Es ist aufgetaucht und es ist falsch](#es ist aufgetaucht und es ist falsch) ist der Fall, in dem überhaupt nichts gemeldet wird.

Berichte geben einem nie Rätsel auf. Ein abgelehnter Datensatz wird benannt, was daran falsch war und normalerweise mit einem Code – siehe Jeder Diagnosecode.

Es ist aufgetaucht und es ist falsch

Der schwierigste Fall, da überhaupt nichts gemeldet wird. Zwei Dinge bestehen jeder Prüfung und geben Ihnen dennoch eine Aufzeichnung, die Sie nicht geschrieben haben.

Ein Feld, das Sie ausgelassen haben, ist kein Fehler, sondern ein Standardwert. Das Schema jeder Familie gibt an, ohne welche Felder ein Datensatz nicht installiert werden kann, und für fast alle Familien ist diese Liste kurz. goods erfordert genau eines: id. Lassen Sie base_price weg und es ist 1. Lassen Sie weight weg und es ist 1,0. Wenn Sie category weglassen, handelt es sich bei der Ware um einen Rohstoff. Nichts alarmiert Sie, denn es ist nichts falsch: Sie haben um eine Ware gebeten und eine bekommen.

Sogar ein Wert, der nicht zur Auswahl steht, ist ein Standardwert. Der Leser gibt vor der Suche alle Großbuchstaben ein, sodass manufactured und MANUFACTURED den gleichen Wert haben und Großschreibung nie das Problem ist: Beginnen Sie nicht damit, Dateien dafür neu zu schreiben. Das Problem ist MANUFACTURED_GOODS: Es ist kein Mitglied und wird daher zu RAW_MATERIAL. SLOW für einen decay_tier wird zu ETERNAL. Die Platte wird installiert, auf dem Bildschirm wird angezeigt, dass sie angewendet wurde, und Ihre Kerze hat den Preis und die Vergänglichkeit von etwas anderem.

Nichts im Spiel sagt das, weil es nichts zu sagen gibt: Das Feld wird als String deklariert, und ein falsch geschriebener String ist immer noch ein String. Der Validator ist der einzige Ort, an dem Sie es mitnehmen können, und jetzt nimmt es es:

typed into the debug console

$ python tools/quality/validate_mod_data.py --root mods/northern_reach
WARN: northern_reach:goods:goods.json#1: category is "MANUFACTURED_GOODS",
  which is not one of RAW_MATERIAL, MANUFACTURED, CONSUMABLE, AMMUNITION,
  EQUIPMENT. It loads as RAW_MATERIAL.
  ERROR=0 WARN=1

Eine Warnung und kein Fehler, da der Datensatz tatsächlich geladen wird und eine Ablehnung jetzt Pakete zerstören würde, die bereits funktionieren. --strict verwandelt es in einen Fehler und ist der Grund dafür, dass Sie --strict vor dem Posten ausführen.

Ein Feld, das Sie weggelassen haben, bleibt stumm, und das kann nicht übernommen werden: Das Weglassen von category und das Schreiben von RAW_MATERIAL sind dieselbe Anforderung. Daher markieren die Feldtabellen in Die Familien, eine nach der anderen Erforderlich und geben die Wertespalte als die Form an, die der Lader überprüft. Wenn ein Datensatz geladen wird und sich wie etwas anderes verhält, vergleichen Sie zunächst Ihre Felder mit dieser Tabelle: Sie suchen nach einem Feld, das Sie nicht geschrieben haben, oder nach einem Wort, das der Lader nicht erkannt hat.

Referenz

Jede Familie

Ein Ordner und ein Bericht pro Familie. Die Statusspalte wird am Build gemessen, es handelt sich also nie um ein Versprechen, das das Spiel nicht hält. Was es ist ist nur die Eröffnungszeile, so dass die Tabelle etwas bleibt, durch das Sie mit Ihrem Auge scrollen können; Die vollständige Beschreibung jeder Familie mit ihren Feldern und einem zu kopierenden Datensatz ist ihr Eintrag in Die Familien, eine nach der anderen.

FamilieZustandOrdner in Ihrem PaketBefehl meldenWas ist das
adaptiveGebrauchsfertigcontent/player/adaptivemodding_adaptive_reportProfile, die sich mit dem Verlauf eines Spiels befassen und einen anderen Ansatz vorschlagen.
audioGeprüft, noch nichts verbraucht escontent/assets/audiomodding_audio_reportSounds, die ein Paket enthält, benannt nach ID: Musik, Ambiente, Effekte und Stimme, wobei jeder auf eine Datei in seinem eigenen Ordner verweist und die Rolle angibt, die ihn abgrenzt.
buildingsGebrauchsfertigcontent/world/buildingsmodding_building_reportDefinitionen von Gebäuden und Dienstleistungen der Siedlung: Bezeichnung, Farbe, Rolle und eine wiederverwendete Innenausstattung.
caravansGebrauchsfertigcontent/logistics/caravansmodding_caravan_reportHandelsrouten, die eine Karawane zurücklegt: wo sie abfährt, wohin sie geht, was sie mitbringt, wie gut sie begleitet wird und wie schnell sie geht.
combat_balanceGebrauchsfertigcontent/combat/balancemodding_combat_balance_reportBegrenzte Kampfbalancewerte, die bestehende Solver-Parameter anpassen, ohne Regeln, Operationen oder Mechaniken hinzuzufügen.
dialogueGebrauchsfertigcontent/narrative/dialoguemodding_dialogue_reportGespräche als Aufzeichnungen: die Grafik, ihre Witze und die darauf liegenden Entscheidungen.
effectsGebrauchsfertigcontent/assets/effectsmodding_effect_reportWetter, Staub, Funken und Lichter, zusammengestellt ausgehend von den Modellen, die der Gastgeber zur Verfügung stellt.
enemy_archetypesGebrauchsfertigcontent/threat/enemy_archetypesmodding_enemy_archetype_reportArten von Feinden, die die strategische Ebene kennt: Rang, welche Varianten sie einsetzen, wo sie lagern, wie groß die Garnison ist und wie oft sie überfallen.
enemy_variantsGebrauchsfertigcontent/combat/enemy_variantsmodding_enemy_variant_reportStatistikblöcke für einen feindlichen Körpertyp auf dem Spielfeld: Klasse, Rang, die fünf Attribute und die IDs der Waffe, der Nebenhand und des Schildes, die er trägt.
fontsGeprüft, noch nichts verbraucht escontent/assets/fontsmodding_font_reportSchriftarten, die ein Paket enthält, benannt nach ID: der Datei, der Größe, in der sie gezeichnet werden, und den Sprachen, deren Glyphen sie enthalten.
goodsGebrauchsfertigcontent/economy/goodsmodding_goods_reportMarktfähige Güter und ihre wirtschaftlichen Eigenschaften.
group_archetypesGebrauchsfertigcontent/strategic/group_archetypesmodding_group_archetype_reportEinstellbare Strategieparameter für eine auf der Weltkarte lebende Gruppe: Warnradius, Zielpräferenz, Mitgliederzahl, Nachschub- und Rückzugsschwellen.
imagesGebrauchsfertigcontent/assets/imagesmodding_image_reportBilder, die ein Paket mitbringt, benannt nach ID: Symbole, Porträts und Spritesheets, die jeweils auf eine Datei in einem eigenen Ordner verweisen.
input_bindingsGebrauchsfertigcontent/inputmodding_input_reportEigene Aktionen eines Pakets, mit dem Schlüssel, den sie möchten.
itemsGebrauchsfertigcontent/inventory/itemsmodding_items_reportInventargegenstände, einschließlich Waffen und Rüstungen.
localesGebrauchsfertigcontent/localemodding_locale_reportDie Wörter, die ein Spieler liest, im CSV-Format mit einer Spalte pro Sprache: die eigenen Schlüssel des Pakets und die des Spiels, bei dem das Paket das Überschreiben angibt.
loreGebrauchsfertigcontent/narrative/loremodding_lore_reportKodexeinträge: Orte, Menschen, Ereignisse, Bräuche und Dinge, über die eine Welt Geschichten erzählt.
mapsGebrauchsfertigcontent/world/mapsmodding_map_reportAnordnungen, die ein Paket in Tiled zeichnet, benannt nach ID: der Datei, wo sie sich auf der Welt befindet und dem Sprachschlüssel, unter dem sie bekannt ist.
mercenary_templatesGebrauchsfertigcontent/character/mercenariesmodding_mercenary_reportAnheuerbare Söldnermodelle: Name, Klasse, Herkunft, anfängliche Gesundheit und Moral, Anheuerkosten und Tag ihres ersten Erscheinens.
mr_linesGebrauchsfertigcontent/medieval_realism/structuredmodding_mr_lines_reportStrukturierte Linien im mittelalterlichen Realismus, weitergeleitet nach Datei- und Zeilen-ID anstelle eines ID-Felds im JSON.
noble_housesGebrauchsfertigcontent/politics/noble_housesmodding_noble_house_reportAusgangsdaten eines Adelshauses: der Herr, der Erbe, welche Siedlungen dem Haus unterstehen und wer als Rivale oder Verbündeter gilt.
npc_definitionsGebrauchsfertigcontent/narrative/npcsmodding_npc_reportDefinitionen benannter NPCs.
perksGebrauchsfertigcontent/character/perksmodding_perk_reportDeklarative Berechtigungen: Trigger und Effekte, ohne dass ein Handler im Code geschrieben ist.
poisGebrauchsfertigcontent/world/poismodding_poi_reportDurch Koordinaten auf der handgeschriebenen Weltkarte platzierte Sehenswürdigkeiten.
presentation_bindingsGebrauchsfertigcontent/presentation/bindings-Welche Paketressource welchen Platz zu welchem ​​Thema füllt: das Symbol auf einem Objekt, das Sprite auf einer Einheit oder einem Plättchen, das Banner auf einer Fraktion, sowohl für den Inhalt des Pakets als auch für den des Basisspiels.
progressGebrauchsfertigcontent/player/progress-Spielerfortschrittsaufzeichnungen: Ziele, sichere Schwierigkeitsprofile und Spielprofile innerhalb der Regeln des Gastgebers.
quest_metadataGebrauchsfertigcontent/narrative/quest_metadatamodding_quest_metadata_reportQuest-Metadatensätze, indiziert nach quest_id statt nach id.
quest_plansGebrauchsfertigcontent/narrative/quest_plansmodding_quest_plan_reportMissionspläne als Aufzeichnungen: Die Handlungsstränge, Missionen, Ziele und Enden, die ein Paket schreibt und aus denen das Spiel seine eigenen Missionen aufbaut.
questsGeprüft, noch nicht installiertcontent/narrative/quests-Handgeschriebene Missionsressourcen, die pro Route geladen werden, anstatt als Aufzeichnungen interpretiert zu werden.
recipesGebrauchsfertigcontent/economy/recipes-Bastelrezepte: Was wird verzehrt, was kommt dabei heraus, wo wird es hergestellt, wie viel kostet es und wie wahrscheinlich ist es, dass es schlecht wird.
relationshipsGebrauchsfertigcontent/companion/relationships-Partnermuster, Richtlinien für begrenzte Beziehungen, Einstellungsbedingungen und deklarative Bindungen.
scenesGebrauchsfertigcontent/narrative/scenesmodding_scene_reportInszenierte Szenen: der Raum, wer sich darin befindet und die Linien, die sich der Reihe nach entfalten.
screensGebrauchsfertigcontent/ui/screensmodding_screen_reportBildschirmlayouts: Welche Abschnitte passen in welches Feld eines Bildschirms, über den das Spiel bereits verfügt, und in welcher Reihenfolge?
settingsGebrauchsfertigcontent/settingsmodding_settings_reportOptionen, die ein Spieler ändern kann, können erklärt und nicht gezogen werden.
themesGebrauchsfertigcontent/assets/themesmodding_theme_reportSchnittstellenpaletten als Token: benannte Farben, Größen und Abstände, mit Paaren, deren Kontrast ein Spieler lesen können muss.
vendor_inventoriesGebrauchsfertigcontent/world/vendor_inventoriesmodding_vendor_inventory_reportHändler-Liefertabellen.
world_generationGebrauchsfertigcontent/world/generation-Generierungsprofile, die nur aus Daten bestehen: gewichtete Auswahl von Biom und Standort, Eigentum des Wirts.
  • Out of the Box – veröffentlichtes Formular, das Spiel installiert Ihre Dateien, es gibt ein Beispiel und Ihre IDs überleben ein Speichern und Neuladen.
  • Geprüft, noch nichts verbraucht es — der Loader liest und prüft die Familie, aber keine spielerorientierte Paketoberfläche verbraucht sie. Audio- und Schriftpakete gehören in diese Stufe: Ein sauberer Bericht lässt kein stummes Signal und keine ungenutzte Schrift im Spiel erscheinen.
  • Überprüft, noch nicht installiert – das Spiel erkennt die Familie und überprüft Ihre Datei, und nichts fügt sie in ein laufendes Spiel ein. Ein Paket, das darauf abzielt, besteht alle Prüfungen und lädt nichts. Es steht mit Absicht auf der Seite: Die Alternative wäre, dass jemand einen Abend dort verbringt, ohne jemals zu merken, dass er nichts falsch gemacht hat.

Vollständig entschieden, ohne Familie, die sie trägt, sodass kein Poster sie fragen kann:

WäreWo würde es hingehen?Was ist das
feature_extensionimmer noch kein OrdnerEin Paket, das eher eine Funktion als einen Inhalt darstellt. Was ein Mod niemals tun kann ist die ehrliche Lesart davon.

Das ist keine Verschwendung. Was ein Mod niemals tun kann ist diese Liste.

Die Familien, eine nach der anderen

Jede Familie kennt den Build, was er akzeptiert, und einen Datensatz, den Sie kopieren können.

  • Die Pflichtfelder sind diejenigen Felder, ohne die ein Datensatz nicht installiert werden kann.
  • Die Wertespalte ist die Form, die der Lader überprüft, kein Hinweis.
  • Wenn eine Familie dies angibt, wird ein Feld, das die Tabelle nicht benennt, zusammen mit dem Datensatz, in dem es sich befindet, abgelehnt. Ein Tippfehler in einem Feldnamen bedeutet, dass ein Datensatz nicht geladen wird, und im Familienbericht wird dies namentlich angegeben.

In jedem Eintrag steht auch, was mit einem Save-the-Day passiert, wenn ein Spieler Sie deinstalliert:

AntwortWas macht die Rettung?
preserve_inert_referenceDie ID bleibt bestehen, löst sich in nichts auf und wird gemeldet. Der, den der Spieler hatte, hat noch einen Namen.
substitute_placeholderEin stabiler Ersatz im Besitz der Engine antwortet, sodass die Welt trotzdem geladen wird und die ursprüngliche ID in der Nähe bleibt.
drop_optional_presentationDie Referenz wird gelöscht, da nichts davon abhängt. Dies kann nur eine Präsentationsfamilie deklarieren.

Hier ist nichts handgeschrieben. Die Felder stammen aus dem veröffentlichten Schema jeder Familie. Jedes Beispiel ist eines der Pakete, die das Test-Array des Frameworks gegen den Loader dreht, wieder unter den Namespace northern_reach stellt und beim Aufrufen dieser Seite erneut anhand seines Musters überprüft: Ein Beispiel, das das Spiel ablehnen würde, führt dazu, dass der Build fehlschlägt.

Die Welt und die Orte, die sie enthält

5 Familien: buildings, caravans, maps, pois, world_generation.

buildings

Definitionen von Gebäuden und Dienstleistungen der Siedlung: Bezeichnung, Farbe, Rolle und eine wiederverwendete Innenausstattung.

  • Status Einsatzbereit
  • Reist Der Service eines Gebäudes
  • Ordner content/world/buildings
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_building_report
  • Wenn ein Spieler Sie deinstalliert substitute_placeholder. Eine Siedlung mit einem Loch, in dem ein Aufschlag stattfand, ist unspielbar; Ein sichtbar fehlendes Gebäude wird ausgelesen und wiederhergestellt.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
roleJaZeichenfolge
color-irgendjemand
description_key-Zeichenfolge
interior-Text, id
interior_service-Text, id
label-Zeichenfolge
label_key-Zeichenfolge
map_binding-Text, id
services-Liste
settlement-Text, id
tier-Ganzzahl von 0 bis 5

In einer Datei namens buildings.json oder einem beliebigen Namen .json in diesem Ordner:

a buildings record, under content/world/buildings

[
  {
    "id": "northern_reach:guildhall",
    "label": "Guild Hall",
    "role": "reeve",
    "color": {
      "r": 0.4,
      "g": 0.34,
      "b": 0.26
    },
    "interior_service": "moot_hall"
  }
]

caravans

Handelsrouten, die eine Karawane zurücklegt: wo sie abfährt, wohin sie geht, was sie mitbringt, wie gut sie begleitet wird und wie schnell sie geht.

  • Status Einsatzbereit
  • Ordner content/logistics/caravans
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_caravan_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Eine Route, deren Paket verschwunden ist, behält ihren Namen und trägt nichts. Das Ersetzen eines Ziels würde die Waren eines Spielers an einen Ort schicken, den er nie akzeptiert hätte.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
origin_settlement_idJaZeichenfolge
destination_settlement_idJaZeichenfolge
cargo_type-Zeichenfolge
cargo_value-Ganzzahl, 0 oder mehr
daily_progress-Zahl von 0,01 bis 1,0
display_name-Zeichenfolge
group_archetype_id-Zeichenfolge
guard_strength-none, light, medium, heavy
initial_spawn_offset_days-Ganzzahl von 0 bis 30

In einer Datei namens caravans.json oder einem beliebigen Namen .json in diesem Ordner:

a caravans record, under content/logistics/caravans

[
  {
    "id": "northern_reach:salt_road_run",
    "display_name": "Salt Road Run",
    "origin_settlement_id": "valdmere",
    "destination_settlement_id": "old_seat",
    "cargo_type": "salt",
    "cargo_value": 240,
    "guard_strength": "light",
    "daily_progress": 0.08,
    "initial_spawn_offset_days": 3
  }
]

maps

Anordnungen, die ein Paket in Tiled zeichnet, benannt nach ID: der Datei, wo sie sich auf der Welt befindet und dem Sprachschlüssel, unter dem sie bekannt ist. Der Index ist der Datensatz; Die Anordnung daneben wird als Daten und niemals als Ressource gelesen, in kanonische Form normalisiert, mit dem veröffentlichten Bausatz verglichen und zusammengestellt, bevor etwas platziert wird. Ein abgelehntes Layout platziert überhaupt nichts, da die Hälfte der Karte eine Region ist, die der Spieler betritt, ohne dass er wissen kann, welche Hälfte angekommen ist.

  • Status Einsatzbereit
  • Ordner content/world/maps
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_map_report
  • Wenn ein Spieler Sie deinstalliert drop_optional_presentation. Keine Rettung nennt eine Disposition. Eine Speicherung benennt den Punkt von Interesse, um den ein Layout verschoben wurde, und dieser Datensatz behält seine Koordinaten, sodass eine zurückgezogene Karte das Layout und niemals den Inhalt kostet. Wenn man es fallen lässt, kehrt die Welt zu dem zurück, was ihre Aufzeichnungen sagen, anstatt eine Position einzunehmen, die niemand mehr vorgibt.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
fileJaText, fixed shape
name_keyJaZeichenfolge
world_originJaListe der ganzen Zahlen von -1000000 bis 1000000
region_id-Zeichenfolge
sha256-Text, fixed shape

In einer Datei namens maps.json oder einem beliebigen Namen .json in diesem Ordner:

a maps record, under content/world/maps

[
  {
    "id": "northern_reach:river_bend",
    "file": "river_bend.tmj",
    "name_key": "MAP_RIVER_BEND",
    "world_origin": [
      4096,
      2560
    ],
    "region_id": "northern_reach:lowlands"
  }
]

pois

Durch Koordinaten auf der handgeschriebenen Weltkarte platzierte Sehenswürdigkeiten.

  • Status Einsatzbereit
  • Route nach Ein Ort auf der Karte
  • Ordner content/world/pois
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_poi_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Ein entdeckter Ort bleibt entdeckt. Missionen und Reisegeschichte deuten auf die Identität hin.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
display_nameJaZeichenfolge
awareness_modifier-Zahl von -1 bis 1
description-Zeichenfolge
discovery_radius-Zahl von 1 bis 10
kind-Ganzzahl oder Zeichenfolge
linked_quest_id-Zeichenfolge
morale_modifier-Ganzzahl von -10 bis 10
narrative_significance_key-Zeichenfolge
one_time_loot-Boolescher Wert
world_position-irgendjemand

In einer Datei namens pois.json oder einem beliebigen Namen .json in diesem Ordner:

a pois record, under content/world/pois

[
  {
    "id": "northern_reach:drowned_mile",
    "kind": "RUINS",
    "display_name": "The Drowned Mile",
    "description": "A stretch of road the river took back. The milestones still stand, chest deep.",
    "world_position": {
      "x": 0.0,
      "y": 0.0
    },
    "discovery_radius": 3.0,
    "one_time_loot": true,
    "morale_modifier": -1,
    "awareness_modifier": 0.05,
    "narrative_significance_key": "POI_DROWNED_MILE_LORE"
  }
]

world_generation

Generierungsprofile, die nur aus Daten bestehen: gewichtete Auswahl von Biom und Standort, Eigentum des Wirts.

  • Status Einsatzbereit
  • Ordner content/world/generation
  • Für das id-Feld weitergeleitete Datensätze
  • Melde nichts von ihm; modding_preflight_report kümmert sich darum
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Beim Speichern wird die ID des ausgewählten Profils aufgezeichnet. Wenn das Paket fehlt, ist es sicherer, diese ID beizubehalten und zu melden, als das Spiel stillschweigend mit der Basisspielkarte neu zu erstellen.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
kindJairgendjemand
idJaText, id
streamJaText, id
tablesJaObjekt
description_key-Zeichenfolge
name_key-Zeichenfolge

In einer Datei namens profiles.json oder einem beliebigen Namen .json in diesem Ordner:

a world_generation record, under content/world/generation

[
  {
    "kind": "generation_profile",
    "id": "northern_reach:ashen_reach",
    "stream": "northern_reach:world_stream",
    "tables": {
      "biomes": [
        {
          "id": "plains",
          "weight": 60
        },
        {
          "id": "forest",
          "weight": 30
        },
        {
          "id": "hills",
          "weight": 10
        }
      ],
      "settlements": [
        {
          "id": "northern_reach:hamlet",
          "weight": 100
        }
      ],
      "buildings": [
        {
          "id": "northern_reach:longhouse",
          "weight": 100
        }
      ],
      "pois": [
        {
          "id": "northern_reach:standing_stone",
          "weight": 100
        }
      ]
    }
  }
]

Menschen, Familien und was sie tun können

8 Familien: enemy_archetypes, enemy_variants, group_archetypes, mercenary_templates, noble_houses, npc_definitions, perks, relationships.

enemy_archetypes

Arten von Feinden, die die strategische Ebene kennt: Rang, welche Varianten sie einsetzen, wo sie lagern, wie groß die Garnison ist und wie oft sie überfallen.

  • Status Einsatzbereit
  • Ordner content/threat/enemy_archetypes
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_enemy_archetype_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Ein Lager weist immer noch darauf hin, was es begründet hat. Ein Austausch würde stillschweigend verändern, was eine Siedlung belagert; Benennung der Abwesenheit, die wir lesen.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
aggression-Zahl von 0 bis 1
behavior_profile_mix-Liste der Zeichenfolgen
camp_count-Ganzzahl von 0 bis 12
camp_glyph-Zeichenfolge
corruption_chance-Zahl von 0 bis 1
description-Zeichenfolge
display_name-Zeichenfolge
encounter_id-Zeichenfolge
garrison_max-Ganzzahl von 1 bis 60
garrison_min-Ganzzahl von 1 bis 60
preferred_camp_biomes-Liste der Zeichenfolgen
raid_cooldown_days-Ganzzahl von 0 bis 30
sortie_size_max-Ganzzahl von 1 bis 30
sortie_size_min-Ganzzahl von 1 bis 30
target_preferences-Liste der Zeichenfolgen
tier-Ganzzahl von 1 bis 5
variant_ids-Liste der Zeichenfolgen
variant_weights-Liste

In einer Datei namens enemy_archetypes.json oder einem beliebigen Namen .json in diesem Ordner:

a enemy_archetypes record, under content/threat/enemy_archetypes

[
  {
    "id": "northern_reach:salt_reavers",
    "display_name": "Salt Reavers",
    "description": "Coastal raiders who winter inland and burn what they cannot carry.",
    "tier": 2,
    "corruption_chance": 0.1,
    "preferred_camp_biomes": [
      "marsh",
      "coast"
    ],
    "camp_count": 3,
    "garrison_min": 8,
    "garrison_max": 16,
    "aggression": 0.4,
    "raid_cooldown_days": 5,
    "sortie_size_min": 4,
    "sortie_size_max": 9,
    "target_preferences": [
      "caravan",
      "settlement"
    ],
    "camp_glyph": "tent"
  }
]

enemy_variants

Statistikblöcke für einen feindlichen Körpertyp auf dem Spielfeld: Klasse, Rang, die fünf Attribute und die IDs der Waffe, der Nebenhand und des Schildes, die er trägt.

  • Status Einsatzbereit
  • Ordner content/combat/enemy_variants
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_enemy_variant_report
  • Wenn ein Spieler Sie deinstalliert substitute_placeholder. Ein Körper, der sich bereits auf dem Spielfeld befindet und keinen Statistikblock hat, kann nicht bekämpft werden. Ein stabiler Ersatz, über den die Engine verfügt, sorgt dafür, dass der Kampf lösbar bleibt und gleichzeitig die ursprüngliche ID erhalten bleibt.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
archetype_idJaZeichenfolge
agility-Zahl von 0 bis 12
ai_behavior-Zeichenfolge
aim-Zahl von 0 bis 12
constitution-Zahl von 0 bis 12
display_name-Zeichenfolge
main_weapon_id-Zeichenfolge
off_weapon_id-Zeichenfolge
shield_id-Zeichenfolge
special_ability_description-Zeichenfolge
special_ability_name-Zeichenfolge
strength-Zahl von 0 bis 12
tier-Ganzzahl von 1 bis 4
variant_class-soldier, archer, berserker, ranger, finisher
will-Zahl von 0 bis 12

In einer Datei namens enemy_variants.json oder einem beliebigen Namen .json in diesem Ordner:

a enemy_variants record, under content/combat/enemy_variants

[
  {
    "id": "northern_reach:salt_reaver_archer",
    "archetype_id": "northern_reach:salt_reavers",
    "display_name": "Salt Reaver Archer",
    "variant_class": "archer",
    "tier": 2,
    "strength": 3.0,
    "agility": 5.0,
    "constitution": 3.5,
    "aim": 6.0,
    "will": 2.5,
    "main_weapon_id": "short_bow",
    "ai_behavior": "keeps distance and gives ground rather than trade blows"
  }
]

group_archetypes

Einstellbare Strategieparameter für eine auf der Weltkarte lebende Gruppe: Warnradius, Zielpräferenz, Mitgliederzahl, Nachschub- und Rückzugsschwellen.

  • Status Einsatzbereit
  • Ordner content/strategic/group_archetypes
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_group_archetype_report
  • Wenn ein Spieler Sie deinstalliert substitute_placeholder. Strategische Intelligenz muss irgendwo einen Schwellenwert erkennen. Es reagiert auf einen Standardwert der Engine, auf den diese Familie bereits zurückgreift.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
aggression-Zeichenfolge
alarm_radius_px-Zahl von 0 bis 2000
behavior_profile_mix-Liste der Zeichenfolgen
captain_archetype_id-Zeichenfolge
display_name-Zeichenfolge
faction_id-Zeichenfolge
kind-none, caravan, patrol, army, lair, camp, …
max_members-Ganzzahl von 1 bis 60
member_archetype_mix-Liste der Zeichenfolgen
min_members-Ganzzahl von 1 bis 60
night_aggression_multiplier-Zahl von 0,25 bis 4
provisions_max-Ganzzahl von 0 bis 99
retreat_hp_pct-Zahl von 0 bis 1
target_preference-Zeichenfolge

In einer Datei namens group_archetypes.json oder einem beliebigen Namen .json in diesem Ordner:

a group_archetypes record, under content/strategic/group_archetypes

[
  {
    "id": "northern_reach:pilgrim_column",
    "display_name": "Pilgrim Column",
    "kind": "nomad",
    "faction_id": "",
    "target_preference": "wandering",
    "aggression": "avoid_player",
    "alarm_radius_px": 300.0,
    "night_aggression_multiplier": 0.5,
    "min_members": 6,
    "max_members": 14,
    "behavior_profile_mix": [
      "coward",
      "balanced"
    ],
    "provisions_max": 6,
    "retreat_hp_pct": 0.6
  }
]

mercenary_templates

Anheuerbare Söldnermodelle: Name, Klasse, Herkunft, anfängliche Gesundheit und Moral, Anheuerkosten und Tag ihres ersten Erscheinens.

  • Status Einsatzbereit
  • Ordner content/character/mercenaries
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_mercenary_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Bereits angeworbene Söldner leben als Einheit in der Rettung; Lediglich die Wirtshausliste verliert ihre Vorlage. Die ID bleibt benannt, so dass die Herkunft des Organischen weiterhin ablesbar ist.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
display_nameJaZeichenfolge
available_from_day-Ganzzahl von 0 bis 999
background-Zeichenfolge
class_id-Zeichenfolge
hire_cost-Ganzzahl von 0 bis 9999
hp_max-Ganzzahl von 1 bis 999
morale_start-Ganzzahl von 1 bis 100

In einer Datei namens mercenaries.json oder einem beliebigen Namen .json in diesem Ordner:

a mercenary_templates record, under content/character/mercenaries

[
  {
    "id": "northern_reach:ditchwater_sapper",
    "display_name": "Ditchwater Sapper",
    "class_id": "skirmisher",
    "background": "Dug siege trenches for whoever was paying, and stopped asking which side it was.",
    "hp_max": 24,
    "morale_start": 70,
    "hire_cost": 180,
    "available_from_day": 6
  }
]

noble_houses

Ausgangsdaten eines Adelshauses: der Herr, der Erbe, welche Siedlungen dem Haus unterstehen und wer als Rivale oder Verbündeter gilt.

  • Status Einsatzbereit
  • Ordner content/politics/noble_houses
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_noble_house_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Die Wertschätzung eines Spielers für ein Haus wird auf seinem Ausweis vermerkt. Eines zu ersetzen würde umschreiben, ohne den Loyalen etwas zu sagen.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
alignment-pro_crown, pragmatic, isolationist, hostile, neutral, opportunist, …
ally_house_ids-irgendjemand
apex_ambition-irgendjemand
apex_claim_legitimacy-irgendjemand
captain_initial_opinion-Ganzzahl von 0 bis 100
captain_initial_stance-hostile, suspicious, neutral, willing, allied
castle_id-Zeichenfolge
corruption_risk-low, moderate, high, critical, unknown
current_lord_id-Zeichenfolge
designer_hooks-Zeichenfolge
display_name-Zeichenfolge
display_name_key-Zeichenfolge
family_npc_ids-irgendjemand
heir_id-Zeichenfolge
house_power_base-irgendjemand
is_defunct-Boolescher Wert
is_minor-Boolescher Wert
lord_state-healthy, ailing, corrupted, missing, dead, none
lore_summary-Zeichenfolge
predecessor_house_id-Zeichenfolge
rival_house_ids-irgendjemand
secret_flags-irgendjemand
settlement_ids-irgendjemand
steward_npc_id-Zeichenfolge
strength-dominant, stable, reduced, weakened, vacant, extinct

In einer Datei namens noble_houses.json oder einem beliebigen Namen .json in diesem Ordner:

a noble_houses record, under content/politics/noble_houses

[
  {
    "id": "northern_reach:house_tidewatch",
    "display_name_key": "VALID_NOBLE_HOUSE_MOD_HOUSE_TIDEWATCH",
    "display_name": "House Tidewatch",
    "strength": "reduced",
    "alignment": "isolationist",
    "corruption_risk": "moderate",
    "is_minor": true,
    "lord_state": "ailing",
    "captain_initial_stance": "suspicious",
    "captain_initial_opinion": 35,
    "apex_ambition": 20,
    "apex_claim_legitimacy": 15,
    "house_power_base": 25,
    "lore_summary": "Kept the coast road open for two hundred years and was paid in salt for it."
  }
]

npc_definitions

Definitionen benannter NPCs.

  • Status Einsatzbereit
  • Pathed in Ein Händler, der es besitzt
  • Ordner content/narrative/npcs
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_npc_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Eine Person mit einem Namen, an den sich die Welt erinnert, ist nicht dasselbe wie jemand, der nie existiert hat, und Berichte deuten auf die Identität hin.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
display_nameJaZeichenfolge
faction-Zeichenfolge oder Ganzzahl
flag_keys-Liste der Zeichenfolgen
is_vendor-Boolescher Wert
kill_reputation_delta-Ganzzahl von -100 bis 100
location_afternoon-Text, id
location_evening-Text, id
location_morning-Text, id
lore_only-Boolescher Wert
need_quest_ids-Liste der Zeichenfolgen
offers_quest_ids-Liste der Zeichenfolgen
personal_need-Zeichenfolge
personality_tags-Liste der Zeichenfolgen
portrait_id-Text, id
price_multiplier-Zahl von 0,1 bis 10
role-Zeichenfolge oder Ganzzahl
settlement_id-Text, id
short_bio-Zeichenfolge
starts_hidden-Boolescher Wert
title-Zeichenfolge
vendor_inventory_id-Text, id
voice_tone-Zeichenfolge

In einer Datei namens npcs.json oder einem beliebigen Namen .json in diesem Ordner:

a npc_definitions record, under content/narrative/npcs

[
  {
    "id": "northern_reach:wandering_herbalist",
    "display_name": "Wandering Herbalist",
    "title": "Travelling Healer",
    "role": "NONE",
    "settlement_id": "old_seat",
    "is_vendor": true,
    "vendor_inventory_id": "northern_reach:herb_stall",
    "personality_tags": [
      "gentle",
      "secretive"
    ]
  }
]

perks

Deklarative Berechtigungen: Trigger und Effekte, ohne dass ein Handler im Code geschrieben ist.

  • Status Einsatzbereit
  • Ordner content/character/perks
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_perk_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Ein Charakter behält, was er verdient hat. Durch das Entfernen einer Funktion wird ein Gebäude, in dem der Spieler ein Spiel verbracht hat, stillschweigend neu geschrieben.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
skillJaText, fixed shape
name_keyJaZeichenfolge
kindJaroad, junction, lateral, capstone
colJaGanzzahl von 0 bis 4
rowJaGanzzahl von 1 bis 7
levelJaGanzzahl von 1 bis 300
description_key-Zeichenfolge
icon-Text, id
parents-Liste der Zeichenfolgen
side-L, R

In einer Datei namens perks.json oder einem beliebigen Namen .json in diesem Ordner:

a perks record, under content/character/perks

[
  {
    "id": "northern_reach:stoneskin",
    "skill": "armour",
    "name_key": "PERK_STONESKIN",
    "description_key": "PERK_STONESKIN_DESC",
    "kind": "lateral",
    "side": "L",
    "col": 0,
    "row": 7,
    "level": 100,
    "parents": [],
    "icon": "northern_reach:stoneskin_icon"
  }
]

relationships

Partnermuster, Richtlinien für begrenzte Beziehungen, Einstellungsbedingungen und deklarative Bindungen.

  • Status Einsatzbereit
  • Ordner content/companion/relationships
  • Für das id-Feld weitergeleitete Datensätze
  • Melde nichts von ihm; modding_preflight_report kümmert sich darum
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Der Kern der Beziehung eines Partners bleibt an seiner Identität hängen, sodass das Entfernen eines Pakets nicht stillschweigend Vertrauen, Groll oder die Geschichte der Verlassenheit löschen kann.

Felder. Diese Familie enthält mehr als einen Datensatztyp und jeder Typ wird anhand seiner eigenen Liste überprüft. Ein Feld, das in dieser Tabelle nicht benannt ist, wird zusammen mit dem Datensatz abgelehnt.

Ein Datensatz mit kind: bond:

FeldNotwendigWerte
idJaText, id
kindJabond
relationJaZeichenfolge
subjectJaZeichenfolge
targetJaZeichenfolge
initial_regardJaGanzzahl von -100 bis 100
policyJaZeichenfolge
description_key-Zeichenfolge
name_key-Zeichenfolge
note_key-Zeichenfolge

Ein Datensatz mit kind: companion_template:

FeldNotwendigWerte
idJaText, id
kindJacompanion_template
unitJaZeichenfolge
recruitJaZeichenfolge
loyaltyJaZeichenfolge
description_key-Zeichenfolge
leave_below-Ganzzahl von -100 bis 100
name_key-Zeichenfolge
starting_regard-Ganzzahl von -100 bis 100

Ein Datensatz mit kind: recruit_terms:

FeldNotwendigWerte
idJaText, id
kindJarecruit_terms
meansJaZeichenfolge
cost-Ganzzahl von 0 bis 1000000
description_key-Zeichenfolge
name_key-Zeichenfolge
requires_bond-Zeichenfolge

Ein Datensatz mit kind: relationship_policy:

FeldNotwendigWerte
idJaText, id
kindJarelationship_policy
relation_kindsJaListe der Zeichenfolgen
boundsJaObjekt
bandsJaListe der Objekte
decay_per_day-Ganzzahl von 0 bis 20
description_key-Zeichenfolge
max_change_per_event-Ganzzahl von 1 bis 50
name_key-Zeichenfolge

In einer Datei namens relationships.json oder einem beliebigen Namen .json in diesem Ordner:

a relationships record, under content/companion/relationships

[
  {
    "id": "northern_reach:marsh_policy",
    "kind": "relationship_policy",
    "relation_kinds": [
      "comrade",
      "feud",
      "sworn"
    ],
    "bounds": {
      "floor": -100,
      "ceiling": 100
    },
    "bands": [
      {
        "name": "hostile",
        "from": -100,
        "to": -61
      },
      {
        "name": "cold",
        "from": -60,
        "to": -31
      },
      {
        "name": "wary",
        "from": -30,
        "to": -11
      },
      {
        "name": "neutral",
        "from": -10,
        "to": 10
      },
      {
        "name": "warm",
        "from": 11,
        "to": 40
      },
      {
        "name": "trusted",
        "from": 41,
        "to": 70
      },
      {
        "name": "devoted",
        "from": 71,
        "to": 100
      }
    ],
    "max_change_per_event": 12,
    "decay_per_day": 1
  },
  {
    "id": "northern_reach:hire_terms",
    "kind": "recruit_terms",
    "means": "hire",
    "cost": 240
  },
  {
    "id": "northern_reach:marsh_companion",
    "kind": "companion_template",
    "unit": "northern_reach:marsh_unit",
    "recruit": "northern_reach:hire_terms",
    "loyalty": "northern_reach:marsh_policy",
    "starting_regard": 8,
    "leave_below": -60
  }
]

Dinge, Handel und die Zahlen hinter einem Zusammenstoß

5 Familien: combat_balance, goods, items, recipes, vendor_inventories.

combat_balance

Begrenzte Kampfbalancewerte, die bestehende Solver-Parameter anpassen, ohne Regeln, Operationen oder Mechaniken hinzuzufügen.

  • Status Einsatzbereit
  • Ordner content/combat/balance
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_combat_balance_report
  • Wenn ein Spieler Sie deinstalliert substitute_placeholder. Bei dem Kontostand handelt es sich um Definitionsdaten, die vom Host gespeichert werden, nicht um das Inventar des Spielers. Wenn sein Paket fehlt, reagiert das kanonische und stabile Balancing und das anschließende Laden bringt keine zweite Möglichkeit mit sich, die Anpassungen zu speichern.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
valuesJaObjekt

In einer Datei namens balance.json oder einem beliebigen Namen .json in diesem Ordner:

a combat_balance record, under content/combat/balance

[
  {
    "id": "northern_reach:coastal_balance",
    "values": {
      "zone_penalty_head": 22,
      "crit_damage_mult": 1.75,
      "friendly_fire_redirect_chance": 0.2
    }
  }
]

goods

Marktfähige Güter und ihre wirtschaftlichen Eigenschaften.

  • Status Einsatzbereit
  • Reist [Ein Gut zum Verkaufen](#ein Gut zum Verkaufen)
  • Ordner content/economy/goods
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_goods_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Eine Escort Dame, die eine Ware benennt, die niemand liefert, ist ehrlich. Sie zu ersetzen würde stillschweigend ändern, was ein Spieler hat.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
base_price-Ganzzahl von 0 bis 1000000
category-Zeichenfolge oder Ganzzahl
daily_consumption_class-Zeichenfolge
decay_tier-Zeichenfolge oder Ganzzahl
display_name-Zeichenfolge
display_name_key-Zeichenfolge
linked_item_id-Zeichenfolge
production_class-Zeichenfolge
tags-Liste der Zeichenfolgen
weight-Zahl von 0 bis 10000

In einer Datei namens goods.json oder einem beliebigen Namen .json in diesem Ordner:

a goods record, under content/economy/goods

[
  {
    "id": "northern_reach:spiced_wine",
    "display_name": "Spiced Wine",
    "category": "consumable",
    "decay_tier": "preserved",
    "base_price": 12,
    "weight": 0.5,
    "tags": [
      "luxury",
      "drink"
    ]
  }
]

items

Inventargegenstände, einschließlich Waffen und Rüstungen.

  • Status Einsatzbereit
  • Gesucht in Ein Gegenstand zum Tragen
  • Ordner content/inventory/items
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_items_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Das Repository benennt ständig, was darin enthalten war, und das ist der einzige Grund, warum es ihnen bei einer Neuinstallation zurückgegeben wird.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
base_value-Ganzzahl, 0 oder mehr
category-Zeichenfolge oder Ganzzahl
condition-Zahl von 0 bis 1
description_key-Zeichenfolge
display_name-Zeichenfolge
display_name_key-Zeichenfolge
icon_id-Text, id
max_stack-ganz, 1 oder mehr
quality_tier-Ganzzahl, 0 oder mehr
rarity-Zeichenfolge oder Ganzzahl
sellable-Boolescher Wert
tags-Liste der Zeichenfolgen
weight-Zahl, 0 oder mehr

In einer Datei namens items.json oder einem beliebigen Namen .json in diesem Ordner:

a items record, under content/inventory/items

[
  {
    "id": "northern_reach:spiced_wine_bottle",
    "display_name": "Bottle of Spiced Wine",
    "category": "CONSUMABLE",
    "rarity": "UNCOMMON",
    "weight": 0.5,
    "max_stack": 10,
    "base_value": 14,
    "sellable": true,
    "tags": [
      "drink",
      "luxury"
    ]
  }
]

recipes

Bastelrezepte: Was wird verzehrt, was kommt dabei heraus, wo wird es hergestellt, wie viel kostet es und wie wahrscheinlich ist es, dass es schlecht wird.

  • Status Einsatzbereit
  • Ordner content/economy/recipes
  • Für das id-Feld weitergeleitete Datensätze
  • Melde nichts von ihm; modding_preflight_report kümmert sich darum
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Nichts in einer Sicherung benennt ein Rezept: Eine Sicherung benennt das Objekt, das ein Prozess erzeugt hat, und die Familie dieses Objekts ist dafür verantwortlich. Was ein zurückgezogenes Rezept hinterlässt, ist eine Station, die etwas nicht mehr anbietet, was gemeldet und nicht repariert wird, denn die Erfindung eines Ersatzrezepts würde dem Spieler einen Gegenstand auf die Hand geben, den es in keinem Paket gibt.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
inputsJaObjekt
craft_tax_rate-Zahl von 0,0 bis 1,0
description_key-Zeichenfolge
display_name_key-Zeichenfolge
enhancer_policy-none, consumed, preserved, damaged, transformed
failure_policy-none, lose_fuel, lose_catalyst, lose_all, damaged_output
gold_cost-Ganzzahl von 0 bis 9999
legality-legal, licensed, suspicious, forbidden, black_market
optional_enhancer-Zeichenfolge
output_count-Ganzzahl von 1 bis 99
output_good_id-Zeichenfolge
output_item_id-Zeichenfolge
quality_policy-fixed, material_inputs, crafter_skill, enhancer, materials_and_crafter
recipe_kind-normal, equipment, special, enhancement
requires_perk_id-Zeichenfolge
requires_service-Zeichenfolge
station_fee-Ganzzahl von 0 bis 9999
success_chance-Zahl von 0,0 bis 1,0
time_cost_minutes-Ganzzahl von 1 bis 60
tools_required-Liste der Zeichenfolgen

In einer Datei namens recipes.json oder einem beliebigen Namen .json in diesem Ordner:

a recipes record, under content/economy/recipes

[
  {
    "id": "northern_reach:salt_cured_ration",
    "display_name_key": "VALID_RECIPE_MOD_SALT_CURED_RATION",
    "recipe_kind": "normal",
    "inputs": {
      "salt": 1,
      "dried_meat": 2
    },
    "output_item_id": "northern_reach:salt_cured_ration",
    "output_count": 3,
    "requires_service": "kitchen",
    "gold_cost": 4,
    "time_cost_minutes": 20,
    "success_chance": 0.95,
    "failure_policy": "lose_fuel",
    "quality_policy": "material_inputs",
    "legality": "legal"
  }
]

vendor_inventories

Händler-Liefertabellen.

  • Status Einsatzbereit
  • Pathed in Ein Händler, der es besitzt
  • Ordner content/world/vendor_inventories
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_vendor_inventory_report
  • Wenn ein Spieler Sie deinstalliert drop_optional_presentation. Bestände werden regeneriert. Ein Händler mit einem leeren Regal ist ein lesbarer Zustand und die Zeile weist auf nichts anderes hin.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
display_nameJaZeichenfolge
entriesJaListe der Objekte
buyback_rate-Zahl von 0 bis 1
description-Zeichenfolge
global_price_multiplier-Zahl, 0 oder mehr
npc_id-Zeichenfolge

In einer Datei namens vendors.json oder einem beliebigen Namen .json in diesem Ordner:

a vendor_inventories record, under content/world/vendor_inventories

[
  {
    "id": "northern_reach:herb_stall",
    "display_name": "Herbalist's Stall",
    "npc_id": "northern_reach:wandering_herbalist",
    "global_price_multiplier": 1.0,
    "buyback_rate": 0.4,
    "entries": [
      {
        "item_id": "northern_reach:spiced_wine_bottle",
        "kind": "consumable",
        "daily_stock": 3,
        "price_multiplier": 1.1,
        "restock_days": 2,
        "min_standing": 0
      }
    ]
  }
]

Geschichte, Missionen und die Wörter, die ein Spieler liest

9 Familien: dialogue, locales, lore, mr_lines, progress, quest_metadata, quest_plans, quests, scenes.

dialogue

Gespräche als Aufzeichnungen: die Grafik, ihre Witze und die darauf liegenden Entscheidungen. Drei Typen teilen sich die Familie und kind sagt, welcher. Ein Paket schreibt die Konversation, niemals die Wörter – jeder Tastendruck ist eine Sprachtaste – und jede Bedingung und jede Konsequenz ist eine Prüfung oder ein Befehl, den dieser Build bereits ausführt.

  • Status Einsatzbereit
  • Ordner content/narrative/dialogue
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_dialogue_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Bei einem Speichervorgang wird aufgezeichnet, was eine Konversation bewirkt hat – eine Mission, die sich bewegt hat, ein Objekt, das den Besitzer gewechselt hat, eine Wahrheit, die man erfahren hat –, niemals die Konversation selbst, die in dem Moment beendet ist, in dem Sie etwas schreiben. Wenn das Paket verschwindet, bleiben die Konsequenzen bestehen, da sie nie Teil des Gesprächs waren und das Gespräch einfach nicht mehr angeboten wird. Es zu ersetzen würde einem Charakter Worte in den Mund legen, die sein Autor nie geschrieben hat.

Felder. Diese Familie enthält mehr als einen Datensatztyp und jeder Typ wird anhand seiner eigenen Liste überprüft. Ein Feld, das in dieser Tabelle nicht benannt ist, wird zusammen mit dem Datensatz abgelehnt.

Ein Datensatz mit kind: dialogue_graph:

FeldNotwendigWerte
kindJadialogue_graph
idJaZeichenfolge
entryJaZeichenfolge
description_key-Text, fixed shape
name_key-Text, fixed shape
speaker-Zeichenfolge

Ein Datensatz mit kind: dialogue_node:

FeldNotwendigWerte
kindJadialogue_node
idJaZeichenfolge
graphJairgendjemand
voiceJaline
speakerJaZeichenfolge
line_keyJairgendjemand
conditions-irgendjemand
description_key-irgendjemand
name_key-irgendjemand
reveals-irgendjemand

Ein Datensatz mit kind: dialogue_node:

FeldNotwendigWerte
kindJadialogue_node
idJaZeichenfolge
graphJairgendjemand
voiceJanarration
line_keyJairgendjemand
conditions-irgendjemand
description_key-irgendjemand
name_key-irgendjemand
reveals-irgendjemand

Ein Datensatz mit kind: dialogue_node:

FeldNotwendigWerte
kindJadialogue_node
idJaZeichenfolge
graphJairgendjemand
voiceJaend
conditions-irgendjemand
description_key-irgendjemand
line_key-irgendjemand
name_key-irgendjemand
reveals-irgendjemand

Ein Datensatz mit kind: dialogue_option:

FeldNotwendigWerte
kindJadialogue_option
idJaZeichenfolge
nodeJaZeichenfolge
label_keyJaText, fixed shape
gotoJaZeichenfolge
commands-Liste von irgendetwas
conditions-Liste von irgendetwas
description_key-Text, fixed shape
name_key-Text, fixed shape

In einer Datei namens gate_toll.json oder einem beliebigen Namen .json in diesem Ordner:

a dialogue record, under content/narrative/dialogue

[
  {
    "kind": "dialogue_graph",
    "id": "northern_reach:gate_toll",
    "entry": "northern_reach:gate_open",
    "speaker": "gate_warden",
    "name_key": "TALK_PACK_GATE_TOLL_NAME",
    "description_key": "TALK_PACK_GATE_TOLL_DESC"
  },
  {
    "kind": "dialogue_node",
    "id": "northern_reach:gate_open",
    "graph": "northern_reach:gate_toll",
    "voice": "line",
    "speaker": "gate_warden",
    "line_key": "TALK_PACK_GATE_OPEN"
  },
  {
    "kind": "dialogue_option",
    "id": "northern_reach:opt_pay_the_toll",
    "node": "northern_reach:gate_open",
    "label_key": "TALK_PACK_OPT_PAY",
    "goto": "northern_reach:gate_paid",
    "commands": [
      {
        "step": "pay_coin",
        "coin": 25
      },
      {
        "step": "change_relation",
        "subject": "player",
        "target": "gate_warden",
        "delta": 4
      }
    ]
  }
]

Das Fixture enthält 12 Datensätze; 3 werden angezeigt.

locales

Die Wörter, die ein Spieler liest, im CSV-Format mit einer Spalte pro Sprache: die eigenen Schlüssel des Pakets und die des Spiels, bei dem das Paket das Überschreiben angibt.

  • Status Einsatzbereit
  • Ordner content/locale
  • Bericht modding_locale_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Eine Speicherung benennt den Datensatz, niemals die Wörter, die ihn ausdrücken. Daher kostet ein Paket, das zwischen zwei Sitzungen zurückgezogen wird, eine Übersetzung und nichts. Der Schlüssel bleibt erhalten und wird angezeigt, was eher wie eine fehlende Übersetzung als wie ein fehlender Inhalt aussieht.

Spalten. Eine Spalte, die diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

SpalteNotwendigWerte
keyJaText, id
en-Zeichenfolge

In einer Datei namens words.csv. Der Dateiname ist die Hälfte der Adresse und die Zeilen-ID die andere Hälfte, sodass zwei Dateien dieselbe Zeilen-ID enthalten können, ohne dass es zu Kollisionen kommt:

a locales file

key,en,it
word_pack:GOOD_FROST_SALT,Frost Salt,Sale di Brina

lore

Kodexeinträge: Orte, Menschen, Ereignisse, Bräuche und Dinge, über die eine Welt Geschichten erzählt. Ein hochgeladener Eintrag ist kein bekannter Eintrag.

  • Status Einsatzbereit
  • Ordner content/narrative/lore
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_lore_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Ein Codexeintrag, den ein Spieler gelesen hat, ist etwas, das er gesehen hat. Wenn er es wegnimmt, löscht er einiges von dem, was er über eine Welt weiß, in der er Zeit verbracht hat, und Quests und andere Einträge weisen auf die ID hin.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
categoryJaplace, person, event, custom, thing
title_keyJaZeichenfolge
body_keyJaZeichenfolge
chronology_index-gesamte
citation_key-Zeichenfolge
content_warnings-Liste der Zeichenfolgen
era-Zeichenfolge
relates_to-Liste der Zeichenfolgen
requires-Liste der Zeichenfolgen
reveals-Liste der Zeichenfolgen

In einer Datei namens lore.json oder einem beliebigen Namen .json in diesem Ordner:

a lore record, under content/narrative/lore

[
  {
    "id": "northern_reach:the_drowned_causeway",
    "category": "place",
    "title_key": "STORY_PACK_DROWNED_CAUSEWAY_TITLE",
    "body_key": "STORY_PACK_DROWNED_CAUSEWAY_BODY",
    "era": "before_the_mark",
    "citation_key": "STORY_PACK_CAUSEWAY_CITATION"
  },
  {
    "id": "northern_reach:the_tide_watch",
    "category": "custom",
    "title_key": "STORY_PACK_TIDE_WATCH_TITLE",
    "body_key": "STORY_PACK_TIDE_WATCH_BODY",
    "relates_to": [
      "northern_reach:the_drowned_causeway"
    ]
  }
]

mr_lines

Strukturierte Linien im mittelalterlichen Realismus, weitergeleitet nach Datei- und Zeilen-ID anstelle eines ID-Felds im JSON.

  • Status Einsatzbereit
  • Ordner content/medieval_realism/structured
  • Bericht modding_mr_lines_report
  • Wenn ein Spieler Sie deinstalliert drop_optional_presentation. Ein Farbwitz, auf den sich nichts bezieht. Das Entfernen kostet nichts und das Beibehalten würde eine leere Zeichenfolge anzeigen.

Spalten. Eine Spalte, die diese Tabelle nicht benennt, ist zulässig und muss ein einfacher Wert anstelle einer Liste oder eines Objekts sein.

SpalteNotwendigWerte
line_idJaText, id
mechanical_hint-Zeichenfolge
public_label-Zeichenfolge
public_line-Zeichenfolge
public_summary_line-Zeichenfolge
speaker-Zeichenfolge
tone-Zeichenfolge
voice-Zeichenfolge

Jeder Datensatz benötigt mindestens einen von public_line, public_label, public_summary_line.

Diese Namen werden ohne Frage abgelehnt, unabhängig davon, was sie enthalten: unsafe_example, unsafe_reason, audit_note, expected_block_reason, script, scene, resource_path. Einige sind die Verifizierungsspalten, mit denen diejenigen schreiben, die das Spiel spielen, und die anderen sind die codeförmigen Namen, die What a mod can never do überall ablehnt. Ein Rekordhalter wird abgelehnt, anstatt stillschweigend abgewischt zu werden.

In einer Datei namens MR_L03_TAVERN_INN_LINES.csv. Der Dateiname ist die Hälfte der Adresse und die Zeilen-ID die andere Hälfte, sodass zwei Dateien dieselbe Zeilen-ID enthalten können, ohne dass es zu Kollisionen kommt:

a mr_lines file

line_id,tavern_state,speaker_role,tone,public_line,mechanical_hint
northern_reach:tavern_extra_01,evening_rush,innkeeper,welcoming,"Warm bread and a clean cup if you've the coin for it, friend.",food_only

progress

Spielerfortschrittsaufzeichnungen: Ziele, sichere Schwierigkeitsprofile und Spielprofile innerhalb der Regeln des Gastgebers.

  • Status Einsatzbereit
  • Ordner content/player/progress
  • Für das id-Feld weitergeleitete Datensätze
  • Melde nichts von ihm; modding_preflight_report kümmert sich darum
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Erreichte Erfolge und ausgewählte Spielprofile bleiben benannt, wenn ihr Paket fehlt; Sie stillschweigend wegzunehmen würde die Geschichte des Spielers oder den Spielvertrag neu schreiben.

Felder. Diese Familie enthält mehr als einen Datensatztyp und jeder Typ wird anhand seiner eigenen Liste überprüft. Ein Feld, das in dieser Tabelle nicht benannt ist, wird zusammen mit dem Datensatz abgelehnt.

Ein Datensatz mit kind: achievement:

FeldNotwendigWerte
idJaText, id
kindJaachievement
name_keyJaZeichenfolge
description_keyJaZeichenfolge
conditionJaListe der Objekte
campaign-Zeichenfolge
hidden-Boolescher Wert
icon-banner, blade, coin, crown, hand, road, …

Ein Datensatz mit kind: difficulty_profile:

FeldNotwendigWerte
idJaText, id
kindJadifficulty_profile
name_keyJaZeichenfolge
modifiersJaObjekt
campaign-Zeichenfolge
description_key-Zeichenfolge
permadeath-Boolescher Wert

Ein Datensatz mit kind: run_profile:

FeldNotwendigWerte
idJaText, id
kindJarun_profile
name_keyJaZeichenfolge
difficultyJaZeichenfolge
campaign-Zeichenfolge
description_key-Zeichenfolge
seed_stream-Zeichenfolge
starting_origin-Zeichenfolge

In einer Datei namens progress.json oder einem beliebigen Namen .json in diesem Ordner:

a progress record, under content/player/progress

[
  {
    "id": "northern_reach:hard_tide",
    "kind": "difficulty_profile",
    "name_key": "DIFF_HARD_TIDE",
    "description_key": "DIFF_HARD_TIDE_DESC",
    "modifiers": {
      "enemy_strength_percent": 140,
      "coin_gain_percent": 80
    },
    "permadeath": true
  },
  {
    "id": "northern_reach:tide_run",
    "kind": "run_profile",
    "name_key": "RUN_TIDE",
    "description_key": "RUN_TIDE_DESC",
    "difficulty": "northern_reach:hard_tide",
    "seed_stream": "tide"
  },
  {
    "id": "northern_reach:held_tide",
    "kind": "achievement",
    "name_key": "ACH_HELD_TIDE",
    "description_key": "ACH_HELD_TIDE_DESC",
    "condition": [
      {
        "when": "days_survived",
        "count": 30
      }
    ],
    "icon": "tower"
  }
]

quest_metadata

Quest-Metadatensätze, indiziert nach quest_id statt nach id.

  • Status Einsatzbereit
  • Ordner content/narrative/quest_metadata
  • Für das quest_id-Feld weitergeleitete Datensätze
  • Bericht modding_quest_metadata_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Er beschreibt Missionen, die selbst bereits auf einen Grabstein reduziert werden könnten; Wenn man es wegnimmt, bleiben sie ohne Beschreibung zurück, statt dass sie fehlen.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
quest_idJaText, id
arc_id-Text, id
choice_valence-Zeichenfolge
consequence_hooks-Liste der Zeichenfolgen
difficulty_band-Zeichenfolge
faction_context-Zeichenfolge
failure_consequence-Zeichenfolge
moral_pressure-Zeichenfolge
notification_policy-Zeichenfolge
novelty_tags-Liste der Zeichenfolgen
player_model_tags-Liste der Zeichenfolgen
quest_role-Zeichenfolge
replay_suppression_key-Zeichenfolge
reward_intent-Zeichenfolge
story_turn_role-Zeichenfolge
urgency_band-Zeichenfolge
world_reason-Zeichenfolge

In einer Datei namens quests.json oder einem beliebigen Namen .json in diesem Ordner:

a quest_metadata record, under content/narrative/quest_metadata

[
  {
    "quest_id": "northern_reach:tavern_errand",
    "world_reason": "settlement_shortage",
    "quest_role": "recovery",
    "difficulty_band": "standard",
    "urgency_band": "soon"
  }
]

quest_plans

Missionspläne als Aufzeichnungen: Die Handlungsstränge, Missionen, Ziele und Enden, die ein Paket schreibt und aus denen das Spiel seine eigenen Missionen aufbaut. Die Aufzeichnungsform einer Mission, neben handschriftlichen Ressourcen statt an deren Stelle.

  • Status Einsatzbereit
  • Ordner content/narrative/quest_plans
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_quest_plan_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Ein Plan baut die gleichen Missionen auf, die das Spiel ausführt, sodass ein pensionierter Plan die gleiche Lücke hinterlässt, die die Handschrift hinterlassen würde. Der Fortschritt ist das Einzige, was ein Spieler nicht rekonstruieren kann: Eine ungelöste Mission wird gemeldet und nie abgeschlossen oder stillschweigend abgebrochen.

Felder. Diese Familie enthält mehr als einen Datensatztyp und jeder Typ wird anhand seiner eigenen Liste überprüft. Ein Feld, das in dieser Tabelle nicht benannt ist, wird zusammen mit dem Datensatz abgelehnt.

Ein Datensatz mit kind: arc:

FeldNotwendigWerte
kindJairgendjemand
idJaText, id
stagesJaListe
description_key-Text, fixed shape
name_key-Text, fixed shape

Ein Datensatz mit kind: ending:

FeldNotwendigWerte
kindJairgendjemand
idJaText, id
arcJaZeichenfolge
requiresJaListe
description_key-Text, fixed shape
epilogue_key-Text, fixed shape
name_key-Text, fixed shape

Ein Datensatz mit kind: objective:

FeldNotwendigWerte
kindJairgendjemand
idJaText, id
questJaZeichenfolge
goalJacollect_item, defeat_unit, defend_place, deliver_item, earn_coin, escort_unit, …
count-Ganzzahl von 1 bis 999
description_key-Text, fixed shape
name_key-Text, fixed shape
optional_step-Boolescher Wert
target-Zeichenfolge

Ein Datensatz mit kind: quest:

FeldNotwendigWerte
kindJairgendjemand
idJaText, id
name_keyJaText, fixed shape
giverJaZeichenfolge
objectivesJaListe
deadline_days-Ganzzahl von 1 bis 3650
description_key-Text, fixed shape
forfeits-Liste von irgendetwas
in_arc-Zeichenfolge
rewards-Liste von irgendetwas

In einer Datei namens the_long_winter.json oder einem beliebigen Namen .json in diesem Ordner:

a quest_plans record, under content/narrative/quest_plans

[
  {
    "kind": "arc",
    "id": "northern_reach:the_long_winter",
    "name_key": "northern_reach.arc.the_long_winter.name",
    "stages": [
      "northern_reach:bring_the_grain"
    ]
  },
  {
    "kind": "quest",
    "id": "northern_reach:bring_the_grain",
    "name_key": "northern_reach.quest.bring_the_grain.name",
    "description_key": "northern_reach.quest.bring_the_grain.description",
    "giver": "northern_reach:the_reeve",
    "in_arc": "northern_reach:the_long_winter",
    "objectives": [
      "northern_reach:gather_grain",
      "northern_reach:pay_the_toll"
    ],
    "deadline_days": 30,
    "rewards": [
      {
        "grant": "receive_coin",
        "coin": 250
      },
      {
        "grant": "give_item",
        "item": "northern_reach:reeves_seal",
        "count": 1
      }
    ]
  },
  {
    "kind": "objective",
    "id": "northern_reach:gather_grain",
    "quest": "northern_reach:bring_the_grain",
    "goal": "collect_item",
    "target": "northern_reach:winter_grain",
    "count": 40,
    "name_key": "northern_reach.objective.gather_grain.name"
  }
]

Das Gerät enthält 5 Datensätze; 3 werden angezeigt.

quests

Handgeschriebene Missionsressourcen, die pro Route geladen werden, anstatt als Aufzeichnungen interpretiert zu werden. Ein Paket, das eine eigene Mission haben möchte, schreibt quest_plans.

  • Status Geprüft, noch nicht installiert
  • Ordner content/narrative/quests
  • Melde nichts von ihm; modding_preflight_report kümmert sich darum
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Fortschritt ist das Einzige, was ein Spieler nicht wieder aufbauen kann. Eine ungelöste Mission wird gemeldet und nie abgeschlossen oder stillschweigend abgebrochen.

Diese Familie wird nach Pfad geladen und nicht als Datensatz gelesen, und ein Paket kann nicht die gewünschte Datei enthalten. siehe Was ein Mod niemals tun kann. Schreiben Sie stattdessen quest_plans.

scenes

Inszenierte Szenen: der Raum, wer sich darin befindet und die Linien, die sich der Reihe nach entfalten. Es ist der einzige Inhalt, der dem Player die Kontrolle entzieht, weshalb eine Sequenz, die niemals end erreicht, abgelehnt und nicht abgespielt wird. Witze und Requisiten sind Namen, die veröffentlichten Listen entnommen sind; Hier werden keine Godot-Szenen, keine Assets und keine Skripte geladen.

  • Status Einsatzbereit
  • Ordner content/narrative/scenes
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_scene_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Eine Speicherung zeichnet auf, was eine Szene getan hat – einen Namen gewählt, eine Mission verschoben, eine Tür geöffnet – nie die Tatsache, dass sie angeschaut wurde. Es wird innerhalb einer einzigen Sitzung abgespielt und endet, sodass ein Paket, das die Szene verlässt, die Szene kostet und niemals eine Folge davon ist, dass man es gesehen hat. Es zu ersetzen würde etwas inszenieren, was der Autor nie unter dem Namen von etwas geschrieben hat, das er geschrieben hat.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
beatsJaListe von irgendetwas
cast-Liste von irgendetwas
name_key-irgendjemand
stage-Objekt
where-Zeichenfolge

In einer Datei namens scenes.json oder einem beliebigen Namen .json in diesem Ordner:

a scenes record, under content/narrative/scenes

[
  {
    "id": "northern_reach:tollhouse_wake",
    "name_key": "STAGE_PACK_TOLLHOUSE_WAKE",
    "stage": {
      "room": [
        880,
        600
      ],
      "light": "candle",
      "props": [
        {
          "prop": "bed",
          "at": "bedside"
        },
        {
          "prop": "storage",
          "at": "east",
          "label_key": "STAGE_PACK_BELONGINGS"
        },
        {
          "prop": "light_marker",
          "at": "north",
          "light": "candle"
        },
        {
          "prop": "walkway",
          "at": "bedside",
          "to": "door"
        }
      ]
    },
    "cast": [
      {
        "actor": "northern_reach:tollkeeper",
        "name_key": "STAGE_PACK_TOLLKEEPER",
        "sprite": "default",
        "at": "bedside"
      }
    ],
    "beats": [
      {
        "beat": "lock_player"
      },
      {
        "beat": "fade_in",
        "seconds": 2.0
      },
      {
        "beat": "say",
        "actor": "northern_reach:tollkeeper",
        "line_key": "STAGE_PACK_WAKE_1"
      },
      {
        "beat": "wait",
        "seconds": 0.8
      },
      {
        "beat": "say",
        "actor": "northern_reach:tollkeeper",
        "line_key": "STAGE_PACK_WAKE_2"
      },
      {
        "beat": "play_cue",
        "cue": "northern_reach:door_latch"
      },
      {
        "beat": "walk_to",
        "actor": "northern_reach:tollkeeper",
        "anchor": "door"
      },
      {
        "beat": "remove_actor",
        "actor": "northern_reach:tollkeeper"
      },
      {
        "beat": "show_exit"
      },
      {
        "beat": "unlock_player"
      },
      {
        "beat": "end"
      }
    ]
  }
]

Wie man alles sieht und hört

7 Familien: audio, effects, fonts, images, presentation_bindings, screens, themes.

audio

Sounds, die ein Paket enthält, benannt nach ID: Musik, Ambiente, Effekte und Stimme, wobei jeder auf eine Datei in seinem eigenen Ordner verweist und die Rolle angibt, die ihn abgrenzt.

  • Status Geprüft, noch nichts verbraucht es
  • Ordner content/assets/audio
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_audio_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Ein Save benennt das Thema und niemals den Ton darüber, sodass ein Paket, das zwischen zwei Sitzungen zurückgezogen wird, eine Atmosphäre und nichts kostet. Der Bezug wird bewahrt und berichtet: Schweigen, ohne zu sagen, warum genau dieser Zustand zu vermeiden ist, den diese Familie vermeiden will.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
fileJaText, fixed shape
codecJaogg, wav
roleJamusic, ambience, sfx, voice
duration_seconds-Zahl, 0 oder mehr
sha256-Text, fixed shape
subtitle_key-Zeichenfolge

In der Datei audio.json, die die einzige Datei ist, über die dieser Ordner gelesen wird:

a audio record, under content/assets/audio

[
  {
    "id": "northern_reach:hearth_hum",
    "file": "hearth_hum.wav",
    "codec": "wav",
    "role": "ambience",
    "duration_seconds": 0.25,
    "sha256": "23fc92432963f74bd638f38ea9d7ddb475853f022810bdc8b344269bf43d5830"
  }
]

effects

Wetter, Staub, Funken und Lichter, zusammengestellt ausgehend von den Modellen, die der Gastgeber zur Verfügung stellt. Ein Paket benennt ein Modell und legt Parameter innerhalb deklarierter Bereiche fest; Es gibt nirgendwo ein Feld, das einen Shader, eine Szene oder ein Skript enthält – und das ist es, was es einem fremden Paket ermöglicht, nach Feuer zu fragen, ohne nach einem Programm fragen zu können.

  • Status Einsatzbereit
  • Ordner content/assets/effects
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_effect_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Nichts in einem Spielstand benennt einen Effekt. Die Luft kehrt zu dem zurück, was das Basisspiel zieht, wenn das Rudel geht, was einen Aspekt und nichts kostet, was ein Spieler besitzt.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
templateJadust_drift, lightning_flash, rain_sheet, smoke_column, snow_drift, spark_burst, …
parameters-Objekt
priority-Ganzzahl von 0 bis 100

In einer Datei namens effects.json oder einem beliebigen Namen .json in diesem Ordner:

a effects record, under content/assets/effects

[
  {
    "id": "northern_reach:moor_drift",
    "template": "dust_drift",
    "parameters": {
      "amount": 64,
      "lifetime": 6,
      "scale": 2,
      "wind": 4,
      "colour": "#c8bfa8"
    },
    "priority": 40
  }
]

fonts

Schriftarten, die ein Paket enthält, benannt nach ID: der Datei, der Größe, in der sie gezeichnet werden, und den Sprachen, deren Glyphen sie enthalten. Das Cover behauptet stattdessen, entlarvt zu sein, weil ein Zeichen, dem die Glyphen einer Sprache fehlen, nicht scheitert: Es zeichnet kleine Quadrate und der Bildschirm liest sich wie eine Übersetzung, die jemand halbfertig hinterlassen hat.

  • Status Geprüft, noch nichts verbraucht es
  • Ordner content/assets/fonts
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_font_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Nichts in einem Spielstand benennt einen Charakter. Beim Verlassen des Pakets wird die Benutzeroberfläche auf die Toolkit-Schriftart zurückgesetzt. Dies ist die einzige Schriftart, die ein Autor auswählen musste.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
fileJaText, fixed shape
formatJattf, otf
sizesJaListe der ganzen Zahlen von 8 bis 96
coversJaListe
fallback_fontJaZeichenfolge
glyphs-Liste
oversampling-Ganzzahl von 1 bis 4
sha256-Text, fixed shape

In der Datei fonts.json, die die einzige Datei ist, über die dieser Ordner gelesen wird:

a fonts record, under content/assets/fonts

[
  {
    "id": "northern_reach:plain",
    "file": "plain.ttf",
    "format": "ttf",
    "sizes": [
      12,
      16,
      24
    ],
    "oversampling": 1,
    "covers": [
      "en"
    ],
    "fallback_font": "Segoe UI",
    "sha256": "613b1d24f9f8b0365a94f01214155af8e87ca72aa6633befd5e0ee05b3dc4122"
  }
]

images

Bilder, die ein Paket mitbringt, benannt nach ID: Symbole, Porträts und Spritesheets, die jeweils auf eine Datei in einem eigenen Ordner verweisen.

  • Status Einsatzbereit
  • Ordner content/assets/images
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_image_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Eine Speicherung benennt Objekte und Personen, niemals ein Bild von einem von ihnen. Ein Bild, das nicht mehr aufgelöst wird, kostet also eine Zeichnung und kein Ding. Der Verweis wird beibehalten und gemeldet: Ersetzen durch Grafiken aus einem anderen Paket würde dem Spieler etwas zeigen, das kein Autor ausgewählt hat, und das stille Entfernen der ID würde dazu führen, dass das fehlende Symbol wie ein Designfehler aussieht.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
fileJaText, fixed shape
formatJapng, webp
frame_columns-Ganzzahl von 1 bis 256
frame_rows-Ganzzahl von 1 bis 256
sha256-Text, fixed shape

In der Datei images.json, die die einzige Datei ist, über die dieser Ordner gelesen wird:

a images record, under content/assets/images

[
  {
    "id": "northern_reach:salt_pouch",
    "file": "salt_pouch.png",
    "format": "png"
  }
]

presentation_bindings

Welche Paketressource welchen Platz zu welchem ​​Thema füllt: das Symbol auf einem Objekt, das Sprite auf einer Einheit oder einem Plättchen, das Banner auf einer Fraktion, sowohl für den Inhalt des Pakets als auch für den des Basisspiels.

  • Status Einsatzbereit
  • Ordner content/presentation/bindings
  • Für das id-Feld weitergeleitete Datensätze
  • Melde nichts von ihm; modding_preflight_report kümmert sich darum
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Ein Speichervorgang benennt das Subjekt – das Objekt, die Person, das Stück – und niemals das Bild, auf dem es abgebildet ist. Daher kostet ein Link, der nicht mehr aufgelöst wird, eine Zeichnung und kein Ding. Der Bezug bleibt erhalten und wird berichtet: Das Thema kehrt zu der Grafik zurück, die der Build bereits hatte, was die einzige Antwort ist, die kein Autor wählen musste.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
subjectJaText, id
kindJabuilding, faction, interface, item, region, tile, …
slotJaambience, banner, effect, font, icon, portrait, …
cueJaText, id
alternative_key-Zeichenfolge

In einer Datei namens bindings.json oder einem beliebigen Namen .json in diesem Ordner:

a presentation_bindings record, under content/presentation/bindings

[
  {
    "op": "add",
    "id": "northern_reach:cloak_icon",
    "subject": "wool_cloak",
    "kind": "item",
    "slot": "icon",
    "cue": "northern_reach:cloak_plain",
    "alternative_key": "item_wool_cloak_icon_alt"
  },
  {
    "op": "add",
    "id": "northern_reach:cloak_icon_winter",
    "subject": "wool_cloak",
    "kind": "item",
    "slot": "icon",
    "cue": "northern_reach:cloak_snowy",
    "alternative_key": "item_wool_cloak_icon_alt",
    "when": {
      "season": {
        "is": "winter"
      }
    }
  }
]

screens

Bildschirmlayouts: Welche Abschnitte passen in welches Feld eines Bildschirms, über den das Spiel bereits verfügt, und in welcher Reihenfolge? Es enthält Teile, die dieser Build zeichnet und die nicht hinzugefügt werden können: Ein neuer Bildschirm würde Widgets, Datenquellen und Klick-Handler benötigen, die zusammen eine Programmiersprache darstellen.

  • Status Einsatzbereit
  • Ordner content/ui/screens
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_screen_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Nichts in einer Rettung nennt eine Disposition. Es entscheidet, wie eine Seite gezeichnet wird, während das Paket geladen wird, und die Seite kehrt beim Verlassen zu dem Layout zurück, das dieser Build mitnimmt: Sie kostet einen Skin und nichts, was ein Spieler besitzt.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
screenJacharacter_sheet
panelsJaObjekt

In einer Datei namens screens.json oder einem beliebigen Namen .json in diesem Ordner:

a screens record, under content/ui/screens

[
  {
    "id": "northern_reach:character_sheet",
    "screen": "character_sheet",
    "panels": {
      "header": [
        "header"
      ],
      "left": [
        "vitals",
        "combat"
      ],
      "middle": [
        "attributes",
        "skills"
      ],
      "right": [
        "service",
        "weight",
        "background"
      ]
    }
  }
]

themes

Schnittstellenpaletten als Token: benannte Farben, Größen und Abstände, mit Paaren, deren Kontrast ein Spieler lesen können muss. Niemals eine Szene, ein Skript oder ein Ressourcenpfad.

  • Status Einsatzbereit
  • Ordner content/assets/themes
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_theme_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Nichts in einem Spielstand benennt ein Thema. Die Benutzeroberfläche kehrt beim Verlassen des Pakets zu den Toolkit-Farben zurück. Dies ist die einzige Palette, die ein Autor bisher auswählen musste.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
idJaText, id
tokensJaObjekt
contrast_pairs-Liste der Objekte

In einer Datei namens themes.json oder einem beliebigen Namen .json in diesem Ordner:

a themes record, under content/assets/themes

[
  {
    "id": "northern_reach:dusk",
    "tokens": {
      "bg_deep": {
        "kind": "colour",
        "value": "#12131a"
      },
      "bg_panel": {
        "kind": "colour",
        "value": "#1b1c26"
      },
      "bg_panel_hi": {
        "kind": "colour",
        "value": "#262838"
      },
      "text": {
        "kind": "colour",
        "value": "#e8e2d0"
      },
      "text_bright": {
        "kind": "colour",
        "value": "#f4efe2"
      },
      "text_mute": {
        "kind": "colour",
        "value": "#6f6a80"
      },
      "border": {
        "kind": "colour",
        "value": "#7f6ab0"
      },
      "border_dark": {
        "kind": "colour",
        "value": "#14151c"
      },
      "border_soft": {
        "kind": "colour",
        "value": "#4a4560"
      },
      "danger": {
        "kind": "colour",
        "value": "#d4564b"
      },
      "success": {
        "kind": "colour",
        "value": "#7fc46a"
      },
      "warning": {
        "kind": "colour",
        "value": "#e0b13c"
      },
      "accent_player": {
        "kind": "colour",
        "value": "#6f97e8"
      },
      "accent_enemy": {
        "kind": "colour",
        "value": "#c94a4a"
      }
    },
    "contrast_pairs": [
      {
        "text": "#e8e2d0",
        "background": "#12131a"
      },
      {
        "text": "#f4efe2",
        "background": "#1b1c26"
      },
      {
        "text": "#e8e2d0",
        "background": "#262838"
      }
    ]
  }
]

Was kontrolliert der Spieler und was beobachtet er

3 Familien: adaptive, input_bindings, settings.

adaptive

Profile, die sich mit dem Verlauf eines Spiels befassen und einen anderen Ansatz vorschlagen. Das Ergebnis ist ein Rat und niemals eine Änderung: Ein Profil, das agieren könnte, wäre das Einzige, was ein Paket mit sich bringt, das in der Lage ist, ein Spiel zu ändern, ohne dass der Spieler oder Gast danach gefragt hätte, und in einem Diff würde es genau wie eine Anpassungstabelle aussehen. Eingaben sind eine veröffentlichte Liste von Spielaggregaten, jeweils eine Anzahl oder ein Durchschnitt, den das Spiel bereits über sich selbst hat.

  • Status Einsatzbereit
  • Ordner content/player/adaptive
  • Für das id-Feld weitergeleitete Datensätze
  • Bericht modding_adaptive_report
  • Wenn ein Spieler Sie deinstalliert drop_optional_presentation. Keine Namen für ein Profil speichern. Was ein Profil berührt hat, ist ein Multiplikator, der von den aktiven Mutatoren bei jeder Änderung neu berechnet wird, sodass ein zurückgezogenes Paket nicht mehr konsultiert wird und das Spiel genau zu dem zurückkehrt, was der Spieler ausgewählt hat. Nichts bleibt erhalten, also gibt es auch nichts zu bewahren.

Felder. Diese Familie enthält mehr als einen Datensatztyp und jeder Typ wird anhand seiner eigenen Liste überprüft. Ein Feld, das in dieser Tabelle nicht benannt ist, wird zusammen mit dem Datensatz abgelehnt.

Ein Datensatz mit kind: adaptive_profile:

FeldNotwendigWerte
kindJairgendjemand
idJaText, id
name_keyJaText, fixed shape
policyJaenemy_composition, event_cadence, hint_frequency, pace_economy, pace_encounters, weather_variety
readsJaListe
fallback_policyJaenemy_composition, event_cadence, hint_frequency, pace_economy, pace_encounters, weather_variety
confidence_floor_percent-Ganzzahl von 1 bis 100
description_key-Text, fixed shape
sample_days-Ganzzahl von 1 bis 365

Ein Datensatz mit kind: threshold_set:

FeldNotwendigWerte
kindJairgendjemand
idJaText, id
profileJaText, id
thresholdsJaListe der Objekte
description_key-Text, fixed shape
name_key-Text, fixed shape

In einer Datei namens adaptive.json oder einem beliebigen Namen .json in diesem Ordner:

a adaptive record, under content/player/adaptive

[
  {
    "kind": "adaptive_profile",
    "id": "northern_reach:hard_roads",
    "name_key": "ADAPTIVE_HARD_ROADS",
    "description_key": "ADAPTIVE_HARD_ROADS_BODY",
    "policy": "pace_encounters",
    "reads": [
      "battles_won_ratio",
      "days_survived",
      "party_size"
    ],
    "fallback_policy": "event_cadence",
    "confidence_floor_percent": 60,
    "sample_days": 14
  },
  {
    "kind": "threshold_set",
    "id": "northern_reach:hard_roads_lines",
    "profile": "northern_reach:hard_roads",
    "name_key": "ADAPTIVE_HARD_ROADS_LINES",
    "thresholds": [
      {
        "signal": "battles_won_ratio",
        "above": 80,
        "advise": "raise"
      },
      {
        "signal": "battles_won_ratio",
        "below": 35,
        "advise": "lower"
      },
      {
        "signal": "party_size",
        "below": 3,
        "advise": "lower"
      },
      {
        "signal": "days_survived",
        "above": 60,
        "advise": "hold"
      }
    ]
  }
]

input_bindings

Eigene Aktionen eines Pakets, mit dem Schlüssel, den sie möchten. Der Spieler entscheidet: Ein Vorschlag, der auf einer von ihm bereits zugewiesenen Kombination landet, verliert, und die Aktion kommt ohne Knopf, weil ein Knopf, der stillschweigend etwas anderes tut, schlechter ist als ein Knopf, der nichts tut.

  • Status Einsatzbereit
  • Ordner content/input
  • Für das action_id-Feld weitergeleitete Datensätze
  • Bericht modding_input_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Die Neuzuweisung eines Spielers bleibt unter der Aktions-ID gespeichert, sodass bei der Neuinstallation des Pakets die Schaltfläche dort gefunden wird, wo Sie sie abgelegt haben. Die Aktion selbst wird aus der Befehlszuordnung entfernt, wenn das Paket verlässt, sodass im Zuweisungsbildschirm nie etwas aufgeführt wird, das auf nichts reagiert.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
action_idJaText, id
label_keyJaZeichenfolge
contextJaexploration, combat, menu, global
suggested_keyboardJaZeichenfolge
suggested_controller-Zeichenfolge

In einer Datei namens bindings.json oder einem beliebigen Namen .json in diesem Ordner:

a input_bindings record, under content/input

[
  {
    "action_id": "northern_reach:call_scout",
    "label_key": "KEY_PACK_CALL_SCOUT",
    "context": "exploration",
    "suggested_keyboard": "f9"
  }
]

settings

Optionen, die ein Spieler ändern kann, können erklärt und nicht gezogen werden. Ein Paket sagt, was die Option ist, welche Werte sie haben kann und wo der Wert lebt; Die Steuerung wird vom Gast erstellt. Nichts, was diese Grenze überschreitet, ist ein Steuerelement oder ein Skript, und das ist der einzige Grund, warum ein Einstellungsmenü die Optionen eines Fremden anzeigen kann, ohne seinen Code auszuführen.

  • Status Einsatzbereit
  • Ordner content/settings
  • Für das key-Feld weitergeleitete Datensätze
  • Bericht modding_settings_report
  • Wenn ein Spieler Sie deinstalliert preserve_inert_reference. Ein gespeicherter Wert verbleibt unter seinem Schlüssel, so dass die Neuinstallation des Pakets die Wahl des Spielers dort findet, wo er es hinterlassen hat. Was das Paket hinterlässt, ist eine Zeile in einem Profil, die niemand liest: Es kostet nichts und bewahrt eine vom Spieler getroffene Wahl.

Felder. Ein Feld, das diese Tabelle nicht benennt, wird mit dem Datensatz abgelehnt.

FeldNotwendigWerte
keyJaText, id
typeJabool, int, float, string, enum
defaultJairgendjemand
scopeJainstallation, campaign, presentation
label_keyJaZeichenfolge
help_key-Zeichenfolge
max_length-Ganzzahl von 1 bis 4096
maximum-Nummer
migrates_from-Text, id
minimum-Nummer
options-Liste der Zeichenfolgen
requires_restart-Boolescher Wert
secret-Boolescher Wert

In einer Datei namens settings.json oder einem beliebigen Namen .json in diesem Ordner:

a settings record, under content/settings

[
  {
    "key": "northern_reach:patrol_density",
    "type": "int",
    "default": 3,
    "minimum": 1,
    "maximum": 9,
    "scope": "campaign",
    "label_key": "OPTION_PACK_PATROL_DENSITY",
    "help_key": "OPTION_PACK_PATROL_DENSITY_HELP"
  },
  {
    "key": "northern_reach:show_road_names",
    "type": "bool",
    "default": true,
    "scope": "presentation",
    "label_key": "OPTION_PACK_SHOW_ROAD_NAMES"
  }
]

Konsolenverknüpfungen

Dies ist eine Abkürzung, kein Schritt. Alles unten hat seinen Platz auf dem Mods-Bildschirm, wo der normale Weg hingeht und wo jeder, der Ihr Paket heruntergeladen hat, nachsehen kann. Die Konsole ist schneller, wenn Sie iterieren, sie ist bereits geöffnet und existiert nur in einem Debug-Build: Eine veröffentlichte Kopie des Spiels hat keine Konsole, sodass nichts, was ein Paketautor benötigt, hier allein leben kann.

BefehlDas Gleiche gilt auf dem Mod-Bildschirm
modding_open_folderden Pfad oben und die Schaltfläche daneben
modding_manifest_reportdie Statusspalte und die Zeile unter jeder Zeile
modding_<family>_reportdie Anzahl unter jedem Paket und Details anzeigen
modding_preflight_reportKompatibilität prüfen
modding_roots_report, modding_safety_reportKopieren Sie den Bericht
modding_reloadKeine Schaltflächen auf dem Bildschirm. Ein Neustart des Spiels bewirkt dasselbe und ist die einzige Möglichkeit, die einen veröffentlichten Build bietet. Dies erspart Ihnen den Neustart während der Iteration. Dies ist die einzige Zeile hier, die eine Annehmlichkeit darstellt und keine Verknüpfung zu etwas darstellt, was der Bildschirm bereits tut.

Beginnen Sie bei modding_manifest_report – erkennt das Spiel Ihr Paket und in welchem ​​Zustand? – dann modding_preflight_report für ein einziges Urteil über alles, was installiert ist. Dann der Bericht der einzelnen Familie.

modding_reload liest deine Dateien ohne Neustart erneut. Bearbeite sie, wechsle per Alt-Tab, gib den Befehl ein und sieh nach. Es baut auf, was nichts festhält — Bindings, Effekte und Bilder — und nennt jede Familie, die es auslässt, weil eine Partie auf Datensätzen steht, die ein Spielstand benennen kann:

what the game prints back

HELD BY THE RUN items: edited files are read on the next load

modding_reload all liest alles noch einmal und ist für einen Begrüßungsbildschirm ohne laufendes Spiel vorgesehen. modding_condition_report gibt aus, was das Spiel jetzt für einen when beantworten kann und was nicht.

BefehlWas sagt es dir?
modding_roots_reportWurzeln und Fußabdrücke von Datenmods
modding_manifest_reportMod-Zustände (aktiv/ungültig/ignoriert/widersprüchlich)
modding_fingerprint_reportDeterministische Footprints von Speicherungen (save_wired=no)
modding_safety_reportSichere Haltung (Verhaltensmodifikationen deaktiviert, Dateien gesperrt)
modding_preflight_reportGRÜN/ROT-Urteil für alle aktiven Mods
modding_packaging_reportPCK/ZIP-Erkennung der Stufe 2 (standardmäßig deaktiviert)
modding_campaign_reportModding_campaign_report [id] – Kampagnen werden schreibgeschützt installiert; Mit einem Ausweis gehst du dorthin
modding_condition_reportWas veröffentlicht die Welt zu Rekordbedingungen?
modding_reloadModding_reload [all] – Pakete erneut lesen; all nur, wenn kein Spiel läuft
modding_binding_reportEinreichungslinks: gebunden/abgelehnt/überschrieben
modding_open_folderErstellt (falls erforderlich) und öffnet den Mods-Ordner des Benutzers

Offline-Tools

Diese Werkzeuge sind für Autoren und Veröffentlichungsautomatisierung gedacht. Sie liegen im öffentlichen Bonemark-Checkout; Spieler eines veröffentlichten Mods benötigen weder Python noch Godot. Wenn du einen Mod schreibst, klone den passenden Stand von github.com/tallowgames/Bonemark, halte dein Arbeitspaket außerhalb des Spielerordners mods und führe die folgenden Befehle aus diesem Checkout aus. Das Spiel bleibt die letzte Runtime-Autorität.

Python 3.10 oder neuer; Godot nur für die Laufzeitspur. Bewahren Sie Ihr Paket außerhalb des Ordners mods des Players auf und versuchen Sie es mit einer Kopie.

a command line

python tools/modding/new_mod.py --list
python tools/modding/new_mod.py --id my_mod --family goods --family items

Es schreibt ein Paket, das die Validierung besteht, bevor Sie überhaupt etwas geschrieben haben: ein vorkompiliertes mod.json, einen Arbeitsdatensatz für jede von Ihnen angeforderte Familie und eine README-Datei mit den nächsten beiden Befehlen. Die Datensätze stammen von Vorrichtungen, die der Build bereits für diese Familien überprüft. Ein Anlasser, der nicht mehr funktioniert, führt also zu derselben Prüfung, die dazu führt, dass die Vorrichtung ausfällt, anstatt innerhalb eines Modells zu verrotten. Es weigert sich, in einen Ordner namens mods zu schreiben.

a command line

python tools/quality/validate_mod_data.py --root "<mod-root>"
python tools/quality/validate_mod_data.py --strict --root "<mod-root>"

Überprüfen Sie mod.json, Familienordner, IDs, Schemata, Referenzen, Grenzwerte und blockierte Nutzlasten. --strict verwandelt Warnungen in Fehler.

Modding-Oberfläche mit Version vergleichen

Wenn sich das Spiel ändert, vergleichen Sie den archivierten Oberflächen-Snapshot, bevor Sie ein Paket aktualisieren. Es enthält einen Digest sowie Felder und Operationen für jede öffentliche Familie, sodass das Ergebnis angibt, welche Familie sich geändert hat und warum:

a command line

python tools/quality/modding_surface_contract.py --json
python tools/quality/modding_surface_contract.py --before "<previous-build>/game/games/bonemark/modding/data/mod_surface_contract.json" --json

Der Unterschied ist unchanged, additive oder breaking. Die Fehlergründe sind eindeutig: field_removed, required_added, type_changed, default_changed, constraint_changed, operation_removed und root_changed, format_changed, id_field_changed, catalogue_changed, family_removed und contract_major_changed_without_new_id. Kompatibler Modifikationsname field_added, required_removed, operation_added oder family_added. Der Befehl ohne --before prüft zusätzlich die hinterlegte Baseline. Wenn sich die aktuelle Oberfläche verschoben hat, schlägt die Prüfung fehl, bis ein Betreuer die genauen Vorher/Nachher-Digests in tools/quality/modding_surface_contract_changes.json untersucht. Bei einer bahnbrechenden Änderung müssen außerdem jeder Grund, die Entscheidung, der Migrationshinweis und der Prüfer erfasst werden. Die Werbung für einen absichtlich überarbeiteten Schnappschuss ist explizit:

a command line

python tools/quality/modding_surface_contract.py --write-baseline

Dies ist eine Betreuer-/Release-Prüfung; Mod-Autoren benötigen nur den --before-Vergleich, und Spieler, die ein veröffentlichtes Paket installieren, müssen es nicht ausführen.

a command line

python tools/modding/mod_test_host.py --root "<mod-root>" --repo-root "<framework-root>" --json

Liest das Manifest, die Abhängigkeiten, die Kompatibilität und die Ladereihenfolge, ohne Godot zu starten und ohne eines Ihrer Pakete auszuführen.

Öffnet niemals eine Inhaltsdatei. Das ist die Arbeitsteilung: Der Host antwortet diese Pakete werden zusammen geladen, der Validator antwortet dieser Datensatz ist korrekt – aber das bedeutet, dass ein Paket, das der Validator ablehnt, hier trotzdem sauber zusammengestellt werden kann. Gemessen an vierzehn absichtlich gebrochenen Paketen sind sich die beiden bei jeder Ablehnung nicht einig: Der Host stellt alle vierzehn leeren refused bereit, einschließlich eines mit scripts/payload.sh, das nur der Validator findet. Wählen ist nicht dasselbe wie eine sichere Installation. Führen Sie beides vor der Veröffentlichung aus. Wiederholen Sie --root, wenn der Testsatz in Ordner unterteilt ist. Der Host stellt dann den gesamten Satz nach einem deterministischen Plan zusammen.

a command line

python tools/modding/mod_test_matrix.py --repo-root "<framework-root>" --root "<mod-root>" --godot "<godot-exe>" --require-runtime --report "mod_test_matrix.json"

Es führt den Validator, den Testhost, das Fixture jeder Familie sofort und die Godot-Laufzeitspur aus. Entfernen Sie --require-runtime, wenn Sie Godot nicht haben. Im Bericht steht dann, dass der Laufzeittest übersprungen und nicht bestanden wurde.

Wiederholen Sie für einen zusammengesetzten Satz die Option:

a command line

python tools/modding/mod_test_matrix.py --repo-root "<framework-root>" --root "<mod-a>" --root "<mod-b>" --godot "<godot-exe>" --require-runtime

Der Bericht behält ein Ergebnis pro Stamm und fügt composed_set für den vollständigen Satz hinzu. In diesem Block werden Paketkonflikte, doppelte IDs und Abhängigkeitsfehler demonstriert. Eine saubere Verpackung allein ist kein Beweis dafür, dass das Set zusammen geladen wird. Der Bericht enthält außerdem surface_contract, die aktuelle Version des Familienvertrags und den Audit-Digest, sodass eine Matrix nicht grün sein kann, während der Repository-Kompatibilitäts-Snapshot veraltet ist. Lesen Sie mit --require-runtime runtime.reachability.loaded_families und runtime.reachability.reachable_families. Der erste besagt, dass die zusammengesetzten Datensätze geladen wurden; der zweite wird nur dann bevölkert, wenn ein echter Pfad, der auf Spieler der Godot-Sonde abzielt, sie verschlungen hat. runtime.reachability.observations verwaltet das Paket, die Familie, die Datensatz-ID, den Pfad und den Status für jede Zeile, während unreachable die geladenen Zeilen auflistet, die noch keinen Pfad haben. Eine Familie kann validiert und inszeniert werden, aber dennoch in reachable_families fehlen: „geladen“ ist nicht dasselbe wie „ein Spieler kann sie erreichen“.

Jeder oben genannte Befehl wird beim Erstellen dieser Seite mit den Tools selbst verglichen: Das Skript muss vorhanden sein und jede Option muss eine akzeptierende Option sein.

Jeder Diagnosecode

Lesen Sie diese Liste nicht der Reihe nach. Es ist hier, damit ein Code, auf den Sie in einem Bericht stoßen, eine Frage mit einer Antwort ist – ein kleines Wort in Kleinbuchstaben wie asset_missing. Fügen Sie einen in das Suchfeld oben auf dieser Seite ein.

Manche Codes gehören zu Mechanismen, die ein Paket noch nicht erreichen kann. Mir geht es genauso: Ein Code, den man nicht auslösen kann, kostet eine Zeile, die man nie lesen wird, und ein Code, der fehlt, kostet einen Abend.

CodeWas hat es verursacht?Was zu tun
adaptive_brings_a_modelEin Paket, das versucht, etwas zu laden oder irgendwohin zu gelangen.Entfernen Sie den Pfad oder die Adresse und wählen Sie eine veröffentlichte Richtlinie anhand des Namens aus. Mitgebrachte Dateien werden hier nicht hochgeladen.
adaptive_fell_backEin Profil, das seinen Mindestwert nicht erreicht hat und die von ihm deklarierte Richtlinie verwendet hat.Es gibt nichts zu reparieren, es sei denn, ich höre nie auf. Das Profil enthielt nicht genügend Signale unter denen, die er las, daher nutzte er die von ihm angegebene Richtlinie als Ausweichlösung.
adaptive_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
adaptive_over_budgetEin Paket oberhalb einer angegebenen Obergrenze.Der Bericht druckt, was gemessen wurde, neben dem, was erlaubt war. Teilen Sie den Datensatz auf oder entfernen Sie Einträge außerhalb der Zeile: Die Obergrenze ist das, was ein Bildschirm oder ein Lesegerät aufnehmen kann, kein Vorschlag.
adaptive_text_not_keyEin Satz, bei dem ein Katalogschlüssel benötigt wird.Verschieben Sie die Phrase in Ihren Sprachkatalog und geben Sie ihren Schlüssel in das Feld ein. Ein Feld, das mit _key endet, enthält einen Schlüssel; Ein Satz drin sorgt dafür, dass Ihr Paket für immer in einer Sprache bleibt.
adaptive_unknown_stepEine Richtlinie, ein Signal oder eine Richtung, die dieser Build nicht hat.Der Name ist nicht in der veröffentlichten Liste für diese Tabelle enthalten. Wählen Sie einen aus, der vorhanden ist: Die Liste ist kurz, da jeder Eintrag etwas ist, was dieser Build bereits tut.
adaptive_unresolved_referenceEin benannter Datensatz, den niemand bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
assembly_dangling_referenceEine Treppe, eine Tür oder ein Eingang benennt etwas, das diese Karte nicht enthält.Fügen Sie das benannte Objekt zu dieser Karte hinzu oder korrigieren Sie die ID. Eine Treppe, deren Treppenabsatz sich nicht auf der Karte befindet, ist ein Stockwerk, das der Spieler betreten und nicht verlassen kann, und ein Gebäude, dessen Eingang kein Durchgang ist, ist eine an einer Wand gezeichnete Tür. Die beiden Enden müssen in derselben Datei liegen.
assembly_leakedBei der Demontage wurden weniger Knoten gelöst als bei der Montage.In Ihrem Paket gibt es nichts zu reparieren, und nichts in einem Paket kann es verursachen. Durch die Demontage wurden weniger Knoten freigegeben als durch die Montage, daher bleibt irgendetwas an einem Teil der vorherigen Karte hängen – schreiben Sie ihn zusammen mit der Karte, die ihn erzeugt hat. Man sieht es als eine Erinnerung, die jedes Mal wächst, wenn man denselben Ort betritt.
assembly_missing_aspectEin obligatorischer Teil des Layouts hat nichts ergeben, daher passt er nicht auf die Karte.Fügen Sie das fehlende Teil auf seiner Ebene hinzu und exportieren Sie es erneut. Die Meldung lautet: Begehbare Rechtecke werden auf die begehbare Ebene gelegt, Collider auf Kollisionen und die Geländekachelebene muss die Karte abdecken. Eine Karte, auf der sich nichts Begehbares befindet, ist ein Ort, den der Spieler betreten und nicht bewegen kann. Daher wird sie abgelehnt statt veröffentlicht.
assembly_over_budgetDie zusammengebaute Form geht über ein deklariertes Dach hinaus.Entfernen Sie einen Teil dessen, was in der Nachricht gezählt wurde, oder teilen Sie die Karte. Das Dach wird anhand dessen gemessen, was zusammengebaut wurde, und nicht anhand der Größe der Datei. Das Komprimieren der Schichten ändert also nichts: Die Zahl in der Nachricht entspricht dem, was die Maschine hätte enthalten sollen.
assembly_refusedEs wurde nichts gebaut, weil es schlimmer ist, eine halbe Karte zu bauen, als keine zu bauen.Korrigieren Sie alle anderen Meldungen aus diesem Lauf und exportieren Sie erneut. Nichts wurde mit Absicht gebaut: Die Hälfte der Karte ist ein Raum, den man ohne Wände betritt, und es gibt keine Möglichkeit zu wissen, welche Hälfte es geschaffen hat.
assembly_unreachable_affordanceEin Ankerplatz ist ein Ort, an dem nichts als begehbar deklariert ist und daher niemand das erreichen kann, was er bietet.Zeichnen Sie auf derselben Ebene ein begehbares Rechteck, das den in der Nachricht genannten Anker berührt. Ein Anker ist das Ding selbst und der Schauspieler steht daneben. Ein Schalter, der sich vollständig in einem begehbaren Bereich befindet, ist also ein Schalter, durch den der Spieler geht, und ein Schalter, der nichts um sich herum hat, ist ein Dienst, den niemand erreichen kann. Überprüfen Sie zunächst die Bodenbeschaffenheit: Ein Schlafplatz im Obergeschoss wird nicht vom Raum darunter bedient.
asset_invalidEin Deskriptor ist vorhanden und dieser Build lehnt ihn ab. Das Urteil sagt, welche Regel.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
asset_kind_mismatchDer Anrufer hat nach einem Typ gefragt und der Deskriptor gibt einen anderen an. Wenn man es trotzdem löst, erhält man eine Textur für etwas, das einen Klang erwartet.Binden Sie eine Ressource des Typs, den der Slot benötigt. Niemand zeichnet ein Porträt für eine Region, daher würde nie eine Verbindung hergestellt und niemand würde sagen, warum.
asset_missingDas Paket ist installiert und deklariert keine Deskriptoren unter dieser ID.Die Ressourcen-ID wird nicht in irgendetwas in der Komposition aufgelöst. Bringen Sie die Datei mit oder verweisen Sie auf die Datei, die Ihr Paket tatsächlich enthält.
asset_package_missingKeine installierten Pakete reagieren auf den Namespace, den die ID benennt.Das Paket, das diese Ressource bereitgestellt hat, ist nicht installiert. Installieren Sie es neu oder binden Sie den Steckplatz an etwas, das in ein installiertes Paket passt.
audio_cue_refusedEin Sound oder eine Wiedergabeliste, die dieser Build nicht aufzeichnet.Lesen Sie die neben dem Code genannte Regel und kodieren Sie sie neu, um sie einzuhalten. Die häufigsten Ursachen sind ein Format, das wir nicht dekodieren, und eine Dauer, die über das angegebene Limit hinausgeht.
audio_placeholder_usedEin abgelehnter oder fehlender Ton wurde in der reservierten Vertretung behoben und der Anrufer wurde benachrichtigt.Es gibt nichts zu reparieren, wenn Sie es wollten. Der Ton fehlte, sodass der Ersatz seines Typs ertönte und der Ersatz signalisiert wurde, anstatt stumm zu bleiben.
audio_refusedEin Sound, den dieser Build nicht reproduziert. Das Urteil sagt, welche Regel.Die Audiodatei selbst wurde abgelehnt, bevor sie abgespielt wurde. Kodieren Sie es in ein deklariertes Format innerhalb der deklarierten Größe um und behalten Sie die Sampling-Rate unter denen in der veröffentlichten Liste bei.
audio_stream_overranEin Fluss, der die durch seinen Deskriptor angegebene Dauer überschreitet, wird am Grenzwert gestoppt.Der Stream ist länger, als sein Slot zulässt. Kürzen Sie es oder verschieben Sie es in einen Slot, dessen Budget dafür reicht: Ein Stream, der überschießt, ist ein Stream, den der Mixer mitten im Wort abschneiden muss.
binding_invalidEine Verbindung, die dieser Build nicht herstellt.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
binding_missing_alternativeInformationen, die ein Spieler nicht erhalten kann, wenn nichts anderes sie trägt.Ein Porträt und ein Symbol benötigen einen Beschreibungsschlüssel und eine gesprochene Zeile benötigt einen Untertitelschlüssel. Fügen Sie die Alternative hinzu: Es ist die einzige Barrierefreiheitsregel, die ein Spieler direkt hört.
binding_over_budgetEinreichen eines Pakets, das über den zulässigen Gesamtbetrag hinausgeht.Der Bericht druckt, was gemessen wurde, neben dem, was erlaubt war. Teilen Sie den Datensatz auf oder entfernen Sie Einträge außerhalb der Zeile: Die Obergrenze ist das, was ein Bildschirm oder ein Lesegerät aufnehmen kann, kein Vorschlag.
binding_placeholder_usedEin Klang, den niemand liefert, gelöst durch den Ersatz seiner Art.Es gibt nichts zu reparieren, wenn Sie es wollten. Der Link wird in den Ersatz für den Ressourcentyp seines Slots aufgelöst, und der Bericht gibt an, um welchen Slot es sich handelt, sodass Sie eine Entscheidung von einem Versehen unterscheiden können.
boot_attempt_recordedVor Beginn der Komposition wurde ein Versuch geschrieben.Nichts zu reparieren. Der Angriff wurde schriftlich festgehalten, bevor er versucht wurde, und das ist es, was den nächsten Angriff darüber informiert, dass etwas schief gelaufen ist.
boot_last_known_good_offeredStattdessen wird ein Profil angeboten, das in der Vergangenheit gestartet wurde.Die fehlgeschlagene Komposition war nicht diejenige, die funktionierte, daher wurde die letzte, die funktionierte, angeboten. Holen Sie es sich und installieren Sie dann die Pakete einzeln neu, um das Paket zu finden, das alles kaputt gemacht hat.
boot_marker_unwritableDer Versuch wurde nicht aufgezeichnet. Das Spiel startet mit deaktivierter Wiederherstellung für diese Sitzung und zeigt dies an.Das Start-Lesezeichen konnte nicht geschrieben werden, sodass Sie beim nächsten Mal einen Absturz nicht von einem sauberen Beenden unterscheiden können. Überprüfen Sie, ob der Spieldatenordner beschreibbar ist. Es geht nicht um Ihr Paket.
boot_package_rejectedEin Paket wurde während der Wiederherstellung abgelehnt. Die ID wird aufgezeichnet, niemals der Pfad.Dieses Paket verhinderte den Start des Spiels und wurde weggelassen. Der Bericht benennt die Ablehnung; Reparieren Sie es und installieren Sie es neu oder lassen Sie es weg.
boot_retry_offeredUnterhalb des Grenzwerts; Das gleiche Profil wird erneut versucht.Akzeptieren Sie den erneuten Versuch. Wenn auch der zweite Start fehlschlägt, liegt das Problem an der Zusammensetzung und nicht am Timing, und das nächste Angebot wird im abgesicherten Modus erfolgen.
boot_safe_mode_offeredDas Limit ist ausgeschöpft; Das Spiel bietet die Möglichkeit, ohne Paket zu starten.Akzeptieren Sie den abgesicherten Modus und entfernen Sie dann die Pakete einzeln, bis es startet. Ihr Speicherstand wird nicht berührt: Der abgesicherte Modus liest ihn und schreibt nie darauf.
budget_aggregate_exceededDer installierte Satz hat das gemeinsame Limit überschritten. Das benannte Paket ist dasjenige, das es in der Ladereihenfolge passiert hat.Nehmen Sie etwas aus der Komposition mit. Es sind alle Pakete zusammen, die über der Obergrenze liegen, nicht nur Ihr Paket, und der Bericht druckt die Gesamtsumme neben der Obergrenze aus.
budget_degradedEine Dimension wurde eher reduziert als verworfen, und sie erhält den Namen, in den sie gefaltet wird.Es gibt nichts zu reparieren, es sei denn, Sie haben es anders gemeint. Die Komposition blieb innerhalb ihres Budgets und verzichtete auf Qualität und nicht auf Inhalt: Nichts fehlt, etwas ist kleiner.
budget_package_exceededEin Paket hat sein Größenlimit überschritten.Lesen Sie die im Bericht angegebene Größe und schneiden Sie das Maß ab. Drucken Sie aus, wie viel Ihr Paket verbraucht hat, und geben Sie an, wie viel ein Paket verwenden darf.
budget_soft_warningJenseits der weichen Schwelle wird es trotzdem geladen und denjenigen gemeldet, die es schaffen.Im Moment gibt es nichts zu reparieren. Sie sind nahe genug an einer Obergrenze, die ein anderes Rudel überschreiten würde, und es ist hilfreich, dies zu wissen, bevor es jemand anderes tut.
budget_unknown_dimensionEs gab einen Bericht über den Verbrauch einer Größe, die dieser Build nicht deklariert, d. h. jemand schreibt auf einer Oberfläche, die nicht existiert.Das Budget nennt etwas, das dieser Bau nicht misst. Wählen Sie eine Größe aus der veröffentlichten Liste – eine Größe, die wir nicht messen, würde niemals durchgesetzt.
budget_unknown_profileEin Profil, das dieser Build nicht deklariert. Anstelle des breiteren Profils wird das strengere Profil verwendet.Wählen Sie ein Budgetprofil aus der veröffentlichten Liste. Profile werden ausgewählt, anstatt beschrieben zu werden. Deshalb würden wir eines, das wir nicht veröffentlichen, niemand durchsetzen.
campaign_hardcoded_identityEin Verbraucher hat die Basiskampagnen-ID ausgeschrieben, anstatt zu fragen, welche Kampagne ausgewählt ist.Etwas hat die Basis-Kampagnen-ID, den Text oder die Szene nach Namen übernommen, anstatt nach der ausgewählten Kampagne zu fragen. Lösen Sie dieses Problem im Kontext der Kampagne, andernfalls erhält eine Konvertierung die Reaktion dieser Welt statt ihrer eigenen.
campaign_invalidDie Anweisung ist keine, die dieser Build auswählen würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
campaign_not_foundFür die ID wurde eine Kampagne ausgewählt und es gibt keine Antworten auf diese ID.Die genannte Kampagnen-ID ist nicht installiert. Überprüfen Sie, wie Sie es geschrieben haben, oder installieren Sie das Paket, das es bereitstellt: Hier greift es nicht auf die Basiskampagne zurück.
character_carries_handlerÖffentliche Daten, die ein privates Symbol benennen.Entfernen Sie das Feld, das eine Methode oder einen Rückruf benennt. Die Veröffentlichung eines internen Symbols macht es zu einem öffentlichen Vertrag, und die Umbenennung, die dazu führt, dass es kaputt geht, wird von den Spielern als spielbrechend gemeldet.
character_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
character_origin_missingEin Charakter, dessen Herkunft von niemandem angegeben wird und der mit Fallback ausgestattet ist.Installieren Sie das Paket neu, das diese Quelle geschrieben hat. Der Charakter hat sich mit dem reservierten Fallback beladen und die Identität, die er verloren hat, reist mit ihm, sodass er durch die Neuinstallation genau so ist, wie er war.
character_tree_unenterableEine nicht erreichbare Schleife oder ein nicht erreichbarer Knoten in einem Fortschrittsbaum.Überprüfen Sie, ob im Bericht „Zyklus“ oder „Waise“ angegeben ist, und verbinden Sie diesen Teil des Baums erneut. Beim Spielen des Spiels liegt auch kein Fehler vor – die Option wird einfach nie angeboten und die Datei scheint korrekt zu sein.
character_unknown_propertyEine Eigenschaft, die für kein System von Bedeutung wäre.Verwenden Sie eine Eigenschaft, die dieser Build hat. Das Akzeptieren eines Feldes, bei dem dies nicht der Fall ist, würde ein Feld in die Speicherung einfügen, das für kein System von Bedeutung ist und für immer niemandem erklärt werden kann.
combat_carries_formulaEin Paket, das versucht, die Arithmetik eines Konflikts bereitzustellen.Entfernen Sie das Feld. Level 1 sind Daten: Was läuft, gehört zum Spiel, und neue Features kommen von einem vertrauenswürdigen Anbieter.
combat_effect_expiredEin gespeicherter Zustand, dessen Kalibrierung nicht mehr vorhanden ist und der beim Laden beendet wird.Das Paket, das diesen Status kalibriert hat, ist nicht mehr installiert, daher wurde stattdessen der Status mit Zahlen angewendet, die niemand hat. Installieren Sie es erneut, um es zu behalten.
combat_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
combat_over_budgetEin Paket oberhalb einer angegebenen Obergrenze.Der Bericht druckt, was gemessen wurde, neben dem, was erlaubt war. Teilen Sie den Datensatz auf oder entfernen Sie Einträge außerhalb der Zeile: Die Obergrenze ist das, was ein Bildschirm oder ein Lesegerät aufnehmen kann, kein Vorschlag.
combat_phase_unreachableEine Phase geschrieben und nie erreicht.Da zwei Phasen einen gemeinsamen Schwellenwert haben, würde eine von ihnen niemals starten. Geben Sie ihnen unterschiedliche verbleibende Gesundheitswerte.
combat_unknown_operationEine Operation oder ein Parameter, den der Solver nicht hat.Wählen Sie den Vorgang aus der veröffentlichten Liste aus und geben Sie ihm nur seine Parameter. Ein wertvoller Anstoß ist eine falsch verstandene Linie, kein stärkerer Anstoß.
combat_unknown_statusEin Zustand, den dieser Build nicht veröffentlicht.Kalibrieren Sie einen Zustand, den dieser Build veröffentlicht, anstatt einen zu erfinden. Ein erfundener Zustand sitzt auf einer Einheit hinter einem leeren Symbol und es gibt nichts, was ihn wegnehmen könnte.
combat_unresolved_referenceEin benannter Datensatz, den niemand bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
conversion_external_referenceEine Adresse oder ein Pfad, der außerhalb des Pakets liegt.Eine Konvertierung wies aus einem eigenen Paket hervor. Bringen Sie mit, worauf Sie sich beziehen, sonst sucht die Welt nach etwas, das Sie nicht geschrieben haben.
conversion_fallback_allowedEine Umstellung, die den Rückgriff auf das Basisspiel weder im Poster noch in der Kampagne verleugnete.Nichts zu reparieren. Diese Familie kann auf das Basisspiel zurückgreifen, und in der Zeile steht, warum es keine Flucht ist.
conversion_family_unclassifiedEs existiert eine Inhaltsfamilie, die in diesem Katalog nicht klassifiziert wird.Erklärt die Familie als Eigentum des Landes oder der Lokomotive. Eine Familie ohne Rang ist eine Familie, über die die Fluchtprüfung im Basisspiel überhaupt nicht nachdenken kann.
conversion_missing_fileEine Datei, die das Gerät deklariert und nicht hat.Eine erforderliche Datei, die die Konvertierung deklariert hat, ist nicht im Paket. Bring it: Eine Konvertierung, der ein Teil ihrer selbst fehlt, wird gestartet und kann dann nicht fortgesetzt werden.
conversion_partial_atomic_familyEine Atomfamilie wurde nur teilweise bereitgestellt. Abgelehnt statt mit sichtbarer Naht veröffentlicht.Bringen Sie die ganze Familie mit oder bringen Sie sie gar nicht mit. Eine halbe Questliste ist eine Welt, die sich auf Quests bezieht, die niemand geschrieben hat.
conversion_required_family_missingEine Familie, die von der Landschaft besessen war, die der Umbau eigentlich bescheren sollte, fehlt.Bringen Sie die Familie mit. Im Katalog steht, welche für eine Konvertierung benötigt werden, und ohne sie ist die Welt das Basisspiel mit neuer Grafik.
conversion_unclaimed_familyEine Familie, für die das Paket Dateien bereitstellt und die die Kampagne nicht beansprucht.Fordern Sie die Familie in einem Paket an oder erklären Sie sie unter Angabe von Gründen für aufgeschoben. Da er nicht in Anspruch genommen wird, gibt es keine Aussage darüber, ob seine Abwesenheit beabsichtigt war.
conversion_unknown_familyDie Kampagne erklärte eine Familie, die diesen Build nicht kennt.Benennen Sie eine Familie aus dem Inhaltstypkatalog. Familien melden sich dort an, bevor irgendjemand eines bereitstellen kann.
conversion_vanilla_leakEine ID, die weder zur Konvertierung noch zum reservierten Namespace der Engine gehört.Ersetzen Sie die ID, den Text oder die Szene, die der Bericht benennt. Durch diese Konvertierung wird der Fallback aufgehoben, die Alternative besteht also darin, dass der Spieler diese Welt in einer anderen sehen kann.
dialogue_carries_expressionEin Paket, das versucht, sofort etwas auszuführen oder Wörter zu schreiben.Entfernen Sie das Feld. Level 1 sind Daten: Was läuft, gehört zum Spiel, und neue Features kommen von einem vertrauenswürdigen Anbieter.
dialogue_dead_endEin Gespräch, aus dem ein Spieler nicht herauskommt.Lassen Sie einen Optionspunkt von diesem Knoten auf einen Pfad verweisen, der zu einem Ende führt. Ein Zyklus ist in Ordnung; Eine Sackgasse ist ein Gespräch, das der Spieler nicht beenden kann.
dialogue_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
dialogue_orphan_nodeEin Knoten, den nichts erreichen kann.An diesen Knoten geht nichts, daher wird ihn kein Spieler lesen. Lassen Sie ihn gegen eine Option wetten oder schreiben Sie ihn ab.
dialogue_over_budgetEin Paket oberhalb einer angegebenen Obergrenze.Der Bericht druckt, was gemessen wurde, neben dem, was erlaubt war. Teilen Sie den Datensatz auf oder entfernen Sie Einträge außerhalb der Zeile: Die Obergrenze ist das, was ein Bildschirm oder ein Lesegerät aufnehmen kann, kein Vorschlag.
dialogue_text_not_keyEin Satz, bei dem ein Katalogschlüssel benötigt wird.Verschieben Sie die Phrase in Ihren Sprachkatalog und geben Sie ihren Schlüssel in das Feld ein. Ein Feld, das mit _key endet, enthält einen Schlüssel; Ein Satz drin sorgt dafür, dass Ihr Paket für immer in einer Sprache bleibt.
dialogue_unguarded_revealEin Geheimnis, dem nichts vorausgeht.Stellen Sie mindestens eine Bedingung auf den Knoten. Eine leere Bedingungsliste gilt als keine: Das Geheimnis geht an denjenigen, der die Konversation eröffnet.
dialogue_unknown_stepEin Steuerelement oder Befehl, den dieser Build nicht hat.Der Name ist nicht in der veröffentlichten Liste für diese Tabelle enthalten. Wählen Sie einen aus, der vorhanden ist: Die Liste ist kurz, da jeder Eintrag etwas ist, was dieser Build bereits tut.
dialogue_unresolved_referenceEin benannter Datensatz, den niemand bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
distribution_hash_mismatchDie Dateien auf der Festplatte entsprechen nicht der Beschreibung im Datensatz.Das Paket auf der CD ist nicht das veröffentlichte. Laden Sie es erneut herunter: Eine Nichtübereinstimmung ist eine fehlgeschlagene Übertragung oder eine Datei, die von jemand anderem geändert wurde.
distribution_invalidDer Datensatz ist nicht einer, den dieser Build akzeptieren würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
distribution_offlineDie Herkunft wurde anhand der Aufzeichnungen zum Zeitpunkt der Installation überprüft.Überprüfen Sie Ihre Verbindung und versuchen Sie es dann erneut. Bereits installierte Pakete funktionieren weiterhin; Neue können erst nach Rückkehr des Dienstes entstehen.
distribution_reportedJemand hat es gemeldet. Der Spieler wird benachrichtigt und entscheidet.Lesen Sie den Bericht und entscheiden Sie. Das Paket funktioniert genauso: Der Bericht existiert so, dass die Entscheidung vor ihm und nicht an seiner Stelle getroffen wird.
distribution_revokedDas Paket wird unter Quarantäne gestellt oder zurückgezogen. Es lässt sich nicht installieren.Entfernen Sie das Paket. Es wurde nach der Veröffentlichung zurückgezogen und wird nicht hochgeladen. Wenn Sie es geschrieben haben, steht in der Widerrufsbelehrung, warum.
distribution_update_deferredEs ist eine neue Version verfügbar und es gibt eine laufende Kampagne für die alte Version.Starten Sie neu, um das Update zu übernehmen. Durch den Austausch eines Pakets während eines laufenden Spiels beginnt ein Speichervorgang mit der Benennung von Dingen, die niemand bereitstellt.
economy_expression_refusedEin Feld, das etwas zur Bewertung bringen würde.Ein Preiseintrag versuchte etwas Wertvolles zu bringen. Wählen Sie eine der vier Kurven aus, die dieser Build implementiert: Ein Preis, der ausgeführt werden kann, ist die Grenze der Ebene 1, die durch die Wirtschaft erreicht wird.
economy_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
economy_out_of_boundsEine Zahl außerhalb des angegebenen Bereichs.Gibt die Zahl innerhalb des deklarierten Bereichs zurück. Jedes numerische Feld hier hat eines, und ein Feld ohne deklarierten Bereich wird eher abgelehnt als durchgelassen.
economy_overriddenEin Paket ersetzte einen von einem anderen Paket oder dem Basisspiel deklarierten Datensatz.Nichts zu reparieren. Dieser Datensatz wurde von einem anderen Paket übernommen, und im Bericht steht, welches Paket es war, sodass Sie entscheiden können, ob das beabsichtigt war.
economy_unresolved_referenceEin Rezept oder Tank, der Inhalte nennt, die niemand bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
effect_carries_sourceEin Deskriptor, der einen Shader, eine Szene oder einen Code benannt hat.Entfernen Sie das Feld, das einen Shader, ein Skript oder eine Szene benennt. Die Effekte setzen sich aus den Engine-Primitiven zusammen; Die Bereitstellung der Quelle bedeutet die Bereitstellung eines Programms.
effect_degradedEin Effekt, der so reduziert wurde, dass er in den Rahmen passt, und so benannt ist, dass die Reduzierung kein Geheimnis darstellt.Es gibt nichts zu reparieren, es sei denn, Sie haben es anders gemeint. Der Effekt wurde auf eine geringere Qualität reduziert, um innerhalb des Rahmenbudgets zu bleiben: Er ist immer noch vorhanden und kleiner.
effect_droppedEin Effekt, der einfach nicht da war.Sehen Sie sich an, welche Größe in der Haushaltsaufstellung angegeben ist, und kürzen Sie diese dann. Im Rahmen war nicht mehr genügend Platz vorhanden, und dieser Effekt wurde überhaupt nicht dargestellt.
effect_refusedEin Effekt, den dieser Build nicht aktiviert. Das Urteil sagt, welche Regel.Lesen Sie den im Bericht genannten Parameter und geben Sie ihn innerhalb des daneben aufgedruckten Bereichs an. Der Effekt wurde zurückgewiesen, bevor irgendetwas ihn hervorrief.
extension_forbidden_fieldDas Manifest enthält ein Feld, das keine Erweiterung enthalten kann, beispielsweise den Pfad zu einem Skript, einem Resolver oder einem privaten Import.Entfernen Sie das Feld. Der Pfad zu einer Skript-, Solver-, privaten Import- oder Projekteinstellungsänderung geht über den Vertrag hinaus in den Gast, und eine Erweiterung, die ihn benötigt, fragt nach einer Fähigkeit, anstatt eine Fähigkeit zu deklarieren: Deklarieren Sie die Fähigkeit unter requires.
extension_foreign_namespaceDer deklarierte Status-Namespace ist nicht die Paket-ID der Erweiterung, daher wäre ihr Status nicht mehr zuordenbar, wenn er nicht mehr vorhanden wäre.Benennen Sie state_namespace in die Paket-ID der Erweiterung um. Der an anderer Stelle angegebene Status kann nicht mehr zugewiesen oder entfernt werden, sobald das Paket weg ist und der Gast seinen Namen behält.
extension_missing_fieldEs fehlt ein Feld, das der Gast installieren, einen Abdruck nehmen, zurückgehen oder die Erweiterung entfernen muss.Fügen Sie das Feld zum Erweiterungsmanifest hinzu. Jedes davon ist etwas, das der Gast benötigt, bevor er die Erweiterung bestellen, in den Kompositions-Footprint einfügen, zurückgehen oder wieder entfernen kann: Auf einem Poster, auf dem eines fehlt, wird eine Funktion beschrieben, die der Gast installieren und niemals entfernen kann.
extension_teardown_incompleteDas Entfernen der Erweiterung brachte weniger zurück, als sie verbrauchte, was dazu führt, dass sie bei der nächsten Installation und nicht jetzt verloren geht.Geben Sie alles zurück, was die Erweiterung benötigt hat, bevor sie die vollständige Disassemblierung erklärte, und aktualisieren Sie takes, wenn sich die wahre Zahl geändert hat. Die Rückgabe von „less“ schlägt jetzt nicht fehl: Bei der nächsten Installation geht der Wert verloren, und die zweimalige Installation derselben Erweiterung in einer Sitzung ist normal.
extension_unboundedEin angegebenes Budget fehlt oder es gibt keine Zahl, daher kann nichts jemals darüber hinausgehen.Schreiben Sie für jedes Budget, das im Vertrag genannt wird, eine Nummer. Ein Budget, das weggelassen oder als Satz geschrieben wird, liest sich wie angegeben und ist mit nichts vergleichbar, daher kann die Verlängerung niemals darüber hinausgehen.
extension_unknown_capabilityDie Erweiterung erfordert oder stellt eine Funktion bereit, die dieser Build nicht veröffentlicht.Vergleichen Sie die Skill-IDs mit denen, die dieser Build veröffentlicht, und entfernen Sie alle, die nicht übereinstimmen, oder benennen Sie sie um. Die Ablehnung vor der Installation ist beabsichtigt: Eine Erweiterung, die beim Drehen eine fehlende Fähigkeit entdeckt, würde sie vor den Augen eines Spielers entdecken.
extension_would_add_autoloadDas Manifest würde eine globale Variable hinzufügen. Abgelehnt, was auch immer die Vertrauensstufe sagt, da ein Paket, das eines hinzufügen könnte, den Rückzug, auf dem dieser Build aufbaut, rückgängig machen würde.Entfernen Sie den Autoload-, Singleton- oder Basis-Autoload-Namen aus dem Manifest. Keine Vertrauensebene gewährt dies: Die gesamte Migration, auf der dieser Build basiert, besteht darin, globale Variablen zurückzuziehen, sodass eine Erweiterung, die eine solche hinzufügen könnte, dies von außen rückgängig machen würde. Fügen Sie den Status unter den Erweiterungsnamensraum ein und erreichen Sie den Gast über die von ihm veröffentlichten Funktionen.
font_locale_fallbackEine Glyphe, die das ausgewählte Zeichen nicht trägt, die aus dem Fallback gezogen und gemeldet wird.Die von Ihnen bereitgestellte Schriftart enthält keine Glyphen für diese Sprache, daher wurde sie vom Fallback übernommen. Bringen Sie eine Schriftart mit, die die Sprache abdeckt, ansonsten besteht der Text aus kleinen Quadraten.
font_refusedEin Charakter, den dieser Build nicht verwendet. Das Urteil sagt, welche Regel.Die Schriftartdatei wurde abgelehnt. Überprüfen Sie, ob es sich bei dem Format um eines der von uns hochgeladenen Formate handelt und dass die Datei kein Programm enthält.
image_bomb_refusedEin Header, der mehr als das Decodierungsbudget beansprucht und abgelehnt wird, bevor ihn ein Decoder gesehen hat.Das Bild wird in viel mehr Dateien dekomprimiert, als die Dateigröße vermuten lässt. Exportieren Sie es erneut in seiner wahren Größe: Es wird vor der Dekodierung abgelehnt, da die Dekodierung den Schaden verursacht.
image_frame_gridEin Blatt, dessen deklariertes Raster es nicht genau teilt.Die Rahmen des Sprite-Sheets teilen seine Abmessungen nicht genau auf. Passen Sie das Raster an, sonst wird jedes Bild nach dem ersten um den Rest verschoben.
image_hash_mismatchDie Bytes wurden nach der Validierung des Deskriptors geändert.Das Bild ist nicht das, was beworben wurde. Erneut exportieren oder erneut deklarieren: Eine Nichtübereinstimmung bedeutet, dass die Datei und das Manifest nicht darüber übereinstimmen, was portiert wurde.
image_placeholder_usedEin abgelehntes oder fehlendes Bild wurde im reservierten Ersatz behoben und der Anrufer wurde benachrichtigt.Es gibt nichts zu reparieren, wenn Sie es wollten. Das Bild fehlte und der Ersatz seines Typs wurde gezeichnet, wobei der Ersatz markiert und nicht leer gelassen wurde.
image_refusedEin Bild, das dieser Build nicht dekodiert. Das Urteil sagt, welche Regel.Erneuter Export in die Größe, das Format und das Budget, die im Bericht angegeben sind. Das Bild wurde abgelehnt, bevor irgendetwas es zeichnete.
inference_cancelledEine Ausführung hat ihr Latenzbudget überschritten und wurde gestoppt. Die Heuristik antwortete, sodass der Anrufer nicht warten musste.Verkleinern Sie das Modell oder erhöhen Sie max_latency_usec, wenn das Budget wirklich zu knapp war. Die Ausführung überschritt das Budget und wurde gestoppt, und die Heuristik reagierte, anstatt den Anrufer warten zu lassen: Ein Frame, der mit Warten verbracht wurde, ist ein Frame, den der Spieler angesehen hat.
inference_digest_mismatchDie Bytes des Musters sind nicht die aufgezeichneten, was es zu einem anderen und nicht zu einem älteren Muster macht.Aktualisieren Sie den deklarierten Digest auf den SHA-256 des Modells, das Sie portieren, oder portieren Sie das Modell, das der Digest benennt. Unterschiedliche Bytes bedeuten, dass es sich um ein anderes Modell handelt und es keine andere Möglichkeit gibt, den Unterschied zu erkennen.
inference_forbidden_fieldDie Deklaration enthält eine Laufzeit, ein Skript, einen Endpunkt, einige Telemetriedaten oder einen Autoritätsanspruch.Entfernen Sie das Feld. Der Adapter gehört zur Engine, daher stellt ein Paket die Gewichtungen bereit und niemals den Code, der sie ausführt; Ein Endpunkt würde das Modell an einen Ort bringen, an dem es nach der Überprüfung geändert werden könnte, und die Telemetrie würde melden, was ein Spieler verlangt. Bringen Sie die Gewichte mit und lassen Sie den Motor sie erledigen.
inference_load_refusedDie Anweisung ist in Ordnung und dieser Build bringt keinen Inferenzadapter zum Laden mit, daher hat die deterministische Heuristik reagiert.In Ihrem Paket gibt es nichts zu reparieren. Dieser Build enthält keine Inferenzadapter, daher wird kein Modell eines Formats geladen und die deterministische Heuristik reagiert. Die Deklaration ist ohnehin validiert, sodass ein heute portiertes Modell ein Modell ist, das ein Adapter ohne Änderung laden könnte.
inference_missing_fieldEiner Modelldeklaration fehlt etwas, das der Adapter benötigt, bevor er etwas für eine Ausführung ausgibt.Fügen Sie das Feld zur Modelldeklaration hinzu. Jedes ist etwas, das der Adapter benötigt, bevor er etwas für einen Lauf ausgibt: Der Digest ist die Identität des Modells, die Muster sind das, was Sie ihm geben und was er zurücknimmt, und die Plattformen sind der Ort, an dem es getestet werden darf.
inference_output_rejectedDie Antwort des Modells entsprach nicht dem angegebenen Ausgabemuster und wurde eher verworfen als nachsichtig interpretiert.Vergleichen Sie die Rückgabe des Modells mit dem deklarierten Ausgabemuster. Eine fast richtige Antwort wird eher verworfen als nachsichtig interpretiert, denn ein Vorschlag, der in der falschen Form angenommen wird, wird bei jeder weiteren Prüfung als gültig angesehen.
inference_unboundedEin angegebener Grenzwert fehlt oder es gibt keine Zahl, daher kann dieser niemals überschritten werden.Schreiben Sie für jedes Limit, das im Vertrag genannt wird, eine Zahl. Ein weggelassener oder in Worten geschriebener Grenzwert liest sich wie angegeben und wird mit nichts verglichen, sodass die Ausführung, die schief geht, von niemandem gemessen wurde.
inference_unknown_formatDas Modellformat ist nicht eines, das vom Engine-Adapter implementiert wird.Exportiert das Modell erneut in einem der Formate, die der Engine-Adapter implementiert. Ein Format, das nicht implementiert wird, ist kein langsamerer Weg: Es ist überhaupt nichts.
inference_wrong_platformDas Modell deklariert diese Plattform nicht, daher reagierte stattdessen die deterministische Heuristik.Es gibt nichts zu reparieren, wenn es gewollt ist. Das Modell deklariert diese Plattform nicht, daher hat die deterministische Heuristik hier reagiert; Fügen Sie die Plattform erst dann zur Deklaration hinzu, wenn das Modell dort tatsächlich gebaut und getestet wurde.
input_binding_conflictDer vorgeschlagene Schlüssel wurde bereits zugewiesen. Die bestehende Zuweisung blieb bestehen und der Hinweis wurde protokolliert und nicht durchgesetzt.In Ihrem Paket gibt es nichts zu reparieren und nichts herauszunehmen. Die Schaltfläche wurde bereits zugewiesen, sodass die Zuweisung des Spielers beibehalten wurde und Ihre Aktion ohne Schaltfläche im Zuweisungsbildschirm angeboten wird. Wählen Sie eine weniger überfüllte Standardeinstellung, wenn Sie möchten, dass diese bei der Installation erhalten bleibt.
input_binding_orphanedEine Neuzuweisung gehört zu einer Aktion, die kein installiertes Paket deklariert. Wird beibehalten und nicht entfernt. Bei einer Neuinstallation wird es also dort gefunden, wo der Player es zurückgelassen hat.Nichts zu reparieren. Die Neuzuweisung gehört zu einer Aktion, die kein installiertes Paket deklariert und die beibehalten und nicht entfernt wird. Daher wird bei der Neuinstallation des Pakets die Schaltfläche dort gefunden, wo der Spieler sie hinterlassen hat.
input_core_actionEin Paket benannt oder versucht, eine der Aktionen des Hosts zu ersetzen.Benennen Sie die Aktion um. Spielaktionen gehören dem Host, und ein Paket kann weder eine solche deklarieren noch sie ersetzen. Wenn man pause einnimmt, spielt man ein Spiel, aus dem man nicht herauskommt. Deklarieren Sie daneben Ihre Aktion und lassen Sie den Spieler beides zuweisen.
input_forbidden_fieldDie Aussage enthält eine direkte Lesart des Geräts, eines Zuhörers, eines Feuergriffs oder eine Zuweisung, die der Spieler nicht ändern konnte.Entfernen Sie das Feld. Das Deklarieren einer Aktion ist die gesamte Schnittstelle: Das direkte Lesen eines Geräts, das Installieren eines Listeners, das Annehmen von Feuer oder das Erzwingen einer Aufgabe nehmen dem Spieler eine Entscheidung ab und sind auf jedem Bildschirm, den er möglicherweise überprüft, unsichtbar.
input_foreign_namespaceDie Aktions-ID passt nicht in den Namensraum des Pakets, das sie deklariert.Benennen Sie die Aktions-ID in Ihren Paket-Namespace um. Die Neuzuweisung von Spielern ist an uns gebunden, daher ist eine ID, die jemand anderem gehört, eine Neuzuweisung, die den Master ändert, wenn eines der beiden Pakete entfernt wird.
input_keyboard_unreachableDie Aktion hat keine Tastaturbelegung, sodass ein Spieler ohne Controller sie nicht erreichen kann.Schreiben Sie neben der Controller-Belegung eine Tastaturbelegung. Eine Nur-Pad-Zuweisung ist für einen Spieler ohne Pad in einem Spiel, das sonst ohne Pad gespielt werden kann, unerreichbar und scheitert für ihn stillschweigend.
input_missing_fieldEiner Aktionsanweisung fehlt etwas, das der Zuweisungsbildschirm oder die Neuzuweisung benötigt.Fügen Sie das Feld zur Aktionsdeklaration hinzu. Jedes ist etwas, das ein Bildschirm benötigt: Die Beschriftungstaste ist das, was die Zuweisungsliste anstelle Ihrer internen ID anzeigt, und der Kontext teilt dem Spiel mit, wann die Aktion aktiv ist, anstatt sie auszulösen, während jemand den Namen eines Speicherstands eingibt.
input_reserved_chordEin Paket hat eine Kombination angefordert, die zum System oder Fenster gehört.Wählen Sie einen anderen Schlüssel. Das Schließen des Fensters, das Beenden des Spiels und der Plattformschlüssel gehören zum Betriebssystem, und ein Paket, das diesen Schlüssel enthielt, könnte jemanden am Beenden hindern.
input_unknown_contextDer deklarierte Kontext wird von diesem Build nicht veröffentlicht, daher weiß niemand, wann die Aktion aktiv ist.Wählen Sie einen der veröffentlichten Kontexte. Niemand weiß, wann eine Aktie in einem unveröffentlichten Kontext aktiv ist, also würde sie entweder nie oder immer ausgelöst, und beides ist nicht das, was Sie gemeint haben.
lore_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
lore_player_state_in_definitionEin Feld, das einen innerhalb einer Definition gefundenen Spieler beschreibt.Entfernen Sie das Feld. Ein Überlieferungsdatensatz ist eine Definition und was der Spieler weiß, ist: Das Laden von Überlieferungen gewährt niemals Wissen, daher wäre ein Feld, das dies vorgibt, ein Feld, das niemand liest.
lore_replacedEin Paket ersetzte einen vorhandenen Eintrag und behielt seine ID und Links bei.Nichts zu reparieren. Ein anderes Paket ersetzte diesen Eintrag und behielt seine ID bei, sodass alles, was darauf zeigte, immer noch auf etwas verweist.
lore_unresolved_referenceEine ID in „relates_to“ offenbart oder erfordert, dass niemand sie bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
lore_verbatim_textText anstelle eines Katalogschlüssels, sodass er nur in einer Sprache erscheint.Ein Feld, das mit _key endet, enthält eine Phrase. Verschieben Sie es in Ihren Sprachkatalog: Umgehen Sie hier jede zweite Prüfung und bringen Sie Ihre Überlieferungen nur in eine Sprache.
map_bad_layer_dataEine Ebene, die die Karte, zu der sie gehört, nicht überdeckt.Exportieren Sie die Ebene unkomprimiert, ohne Blöcke und ohne kurze Linien erneut. Die Teilmenge, die wir akzeptieren, ist die Teilmenge, die wir zu kontrollieren wissen.
map_carries_pathEine Karte, die etwas zum Laden oder Ausführen benennt.Entfernen Sie das Feld, das auf eine Datei verweist. Eine Karte benennt ihre Kacheln aus dem Bausatz; Ein Pfad ist die Art und Weise, wie ein Paket aus sich selbst heraus gelangt.
map_duplicate_anchorZwei Objekte, die dieselbe ID beanspruchen.Zwei Anker teilen sich einen Namen, daher hängt es von der Lesereihenfolge ab, an welchen Anker sich etwas anschließt. Benennen Sie eines um.
map_invalidDie Karte ist keine, die dieser Build zusammenstellen würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
map_kit_mismatchEine Karte, die für einen Bausatz entwickelt wurde, den dieser Build nicht hat.Die Karte wurde für ein anderes Kit geschrieben als das, was dieser Build veröffentlicht. Exportieren Sie es erneut mit dem aktuellen Kit: Die Rollen und Klassen wurden verschoben.
map_layer_missingEine Pflichtstufe fehlt oder ist schlecht konzipiert.Fügen Sie die Ebene hinzu, die der Vertrag erfordert. Die Projektdatei des Bausatzes listet sie auf, und es fehlt eine Karte, die mit einem Loch darin geladen wird.
map_normalization_failedDie Karte brachte keine kanonische Form hervor.Entfernen Sie das Konstrukt, das der Bericht benennt, und exportieren Sie es erneut. Ohne eine kanonische Form können Sie nicht beweisen, dass die Laufzeit und der Offline-Validator auf dieser Karte übereinstimmen.
map_outside_packageEin Kachelsatz oder eine Vorlage, die von außerhalb des Pakets stammt.Die Karte zeigt auf etwas außerhalb ihres eigenen Pakets. Bringen Sie es mit, sonst hängt die Karte davon ab, was installiert ist.
map_over_budgetEine Karte, die über einen angegebenen Grenzwert hinaus normalisiert wurde.Der Bericht druckt, was gemessen wurde, neben dem, was erlaubt war. Teilen Sie den Datensatz auf oder entfernen Sie Einträge außerhalb der Zeile: Die Obergrenze ist das, was ein Bildschirm oder ein Lesegerät aufnehmen kann, kein Vorschlag.
map_unresolved_referenceEine benannte ID, die niemand bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
map_unsupported_subsetEtwas in der Datei stimmt nicht mit der Teilmenge des Formats überein.Die Datei verwendet eine Tiled-Funktion aus der Teilmenge, die dieser Build liest: reduzierte Ebenen, Bildebenen, Gruppen, Blöcke oder Polygone. Wiederexport ohne.
pack_claims_host_surfaceEine Autoload-, Eingabeaktions- oder Projekteinstellung.Überschreiben Sie den Inhalt anstelle der Datei. Pakete fügen Inhalte hinzu und ersetzen sie; die für den Spielstart benötigten Flächen gehören nicht dazu.
pack_collisionEin Anspruch, den ein anderes Paket bereits hat.Geben Sie die Datei in einem der beiden Pakete ab. Der Bericht nennt beide, und wenn man es dabei belassen würde, würde man den Versammlungsauftrag gewinnen.
pack_mount_failedEr hat den Motor nicht montiert; der bisherige Satz bleibt gültig.Das Paket konnte überhaupt nicht zusammengebaut werden. Überprüfen Sie, ob das Archiv intakt ist und in einem Format vorliegt, das dieser Build liest.
pack_replaces_vanillaEin Anspruch, den das Basisspiel hat.Überschreiben Sie den Inhalt anstelle der Datei oder fordern Sie eine vertrauenswürdige Ersetzungsfunktion an. Das Ersetzen einer Basisspieldatei ist nicht etwas, was ein Datenpaket tut.
pack_restart_requiredDas zusammengesetzte Ganze würde sich verändern, und Veränderung kann in diesem Prozess nicht wirksam werden.Die Änderung kann nicht auf ein laufendes Spiel angewendet werden. Neustart: Wenn gemountete Inhalte mitten im Spiel ausgetauscht werden, liest die Hälfte des Spiels alte Dateien.
progress_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
progress_origin_lostEine erlangte Errungenschaft, deren Paket verschwunden, erhalten und benannt ist.Nichts zu reparieren. Das Paket, das es deklariert hat, ist verschwunden und das Paket, das der Spieler verdient hat, bleibt; Der Ausweis ist da, sodass er weiß, was ihn zurückbringen würde.
progress_over_budgetEin Paket oberhalb einer angegebenen Obergrenze.Der Bericht druckt, was gemessen wurde, neben dem, was erlaubt war. Teilen Sie den Datensatz auf oder entfernen Sie Einträge außerhalb der Zeile: Die Obergrenze ist das, was ein Bildschirm oder ein Lesegerät aufnehmen kann, kein Vorschlag.
progress_reaches_outsideEin Paket, das versucht, etwas zu tun oder im Namen der Plattform zu sprechen.Entfernen Sie das Feld. Ob ein Meilenstein die Plattform erreicht, wird von seinem Namensraum abgeleitet und ist niemals etwas, das in einem Datensatz angegeben ist.
progress_reserved_namespaceEin Paket, das einen Namensraum beansprucht, der nicht sein eigener ist.Verwenden Sie Ihren Paket-Namespace. Die Vorbehaltenen gehören uns, und man würde glauben, dass es sich um ein Tor handelt, das scheinbar von der Plattform stammt.
progress_text_not_keyEin Satz, bei dem ein Katalogschlüssel benötigt wird.Verschieben Sie die Phrase in Ihren Sprachkatalog und geben Sie ihren Schlüssel in das Feld ein. Ein Feld, das mit _key endet, enthält einen Schlüssel; Ein Satz drin sorgt dafür, dass Ihr Paket für immer in einer Sprache bleibt.
progress_unknown_stepEine Bedingung oder ein Modifikator, den dieser Build nicht hat.Der Name ist nicht in der veröffentlichten Liste für diese Tabelle enthalten. Wählen Sie einen aus, der vorhanden ist: Die Liste ist kurz, da jeder Eintrag etwas ist, was dieser Build bereits tut.
progress_unresolved_referenceEin benannter Datensatz, den niemand bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
provider_forbidden_capabilityEin Paket hat nach einer Funktion gefragt, die keine Ebene gewährt, etwa ein Dateisystem, ein Netzwerk oder einen Prozess.Entfernen Sie die Kapazität. Keine Ebene gewährt das Dateisystem, Netzwerk, den Prozess oder den Namespace eines anderen Pakets, und keine Revision oder Signatur ändert dies: Was ein Build mit dem Dateisystem macht, ist keine Eigenschaft, die jemand durch Lesen steuern kann. Verwenden Sie propose_intent, um einen Vorschlag an den kanonischen Eigentümer zu übergeben, und write_own_namespace für den Status, der überleben muss.
provider_native_extension_refusedEs wurde eine native Erweiterung gefunden. Es hat die volle Autorität über den Prozess, bevor eine Richtlinie umgesetzt wird, daher wird es aus eigenem Grund und nicht als fehlgeschlagene Vertrauensprüfung abgelehnt.Entfernen Sie die Erweiterung aus dem Paket. Die Engine lädt eine GDExtension mit voller Autorität über den Prozess, bevor irgendein Teil dieser Richtlinie ausgeführt wird. Daher wird sie als das, was sie ist, und nicht als derjenige, der sie unterzeichnet hat, abgelehnt. Durch die Ratifizierung der Anbieterebene wird sich diese Reaktion nicht ändern.
provider_tier_inactiveDie Ebene der Verhaltensanbieter ist in diesem Build nicht ratifiziert, sodass keine ausführbare Datei geladen wurde.In Ihrem Paket gibt es nichts zu reparieren. Dieser Build hat die Behavior Vendors-Ebene nicht ratifiziert, daher wird ein Skript, eine gepackte Szene oder eine native Erweiterung von demjenigen abgelehnt, der es signiert hat. Bringen Sie die Mechanik als deklarative Aufzeichnung mit, wenn eine der veröffentlichten Familien sie tragen kann, und lesen Sie die Versionshinweise des Builds, der die Stufe bestätigt, bevor Sie einen Anbieter dagegen schreiben.
provider_unknown_capabilityEin Paket hat nach einer Funktion gefragt, die dieser Build nicht veröffentlicht.Entfernen Sie die Fähigkeit aus dem Manifest oder ersetzen Sie sie durch eine, die dieser Build veröffentlicht. Die Liste ist absichtlich kurz: Eine Berechtigung, die niemand veröffentlicht, ist eine Berechtigung, über die der Host nicht nachdenken kann, daher wird sie eher abgelehnt als ignoriert.
provider_unknown_load_kindEin Paket bot etwas, das für diesen Build nicht geeignet ist. Abgelehnt und nicht als Daten behandelt, denn wenn man hier eine falsche Annahme macht, bedeutet das, dass man in der Richtung, in der es ausgeführt wird, falsch liegt.Vergleichen Sie das Angebot des Pakets mit den vier Typen, die dieser Build klassifiziert: deklarative Daten, eine gepackte Szene, ein Skript oder eine native Erweiterung. Alles andere wird eher verworfen als erraten, denn Erraten bedeutet hier Vermutung in Richtung der Ausführung.
provider_untrustedDas Paket befindet sich in einem vertrauenswürdigen Zustand, in dem nichts geladen wird. Dies ist der Zustand, in dem jedes Paket beginnt.In Ihrem Paket gibt es nichts zu reparieren, und nichts, was ein Paket selbst reparieren kann. Das Vertrauen ist an die genauen Bytes gebunden und es ist der Spieler, der es gibt. Installieren Sie also das Paket von einer Quelle seiner Wahl und lassen Sie es von ihm bestätigen. Ein widerrufener Digest wird nicht wieder vertrauenswürdig, wenn er erneut erkannt wird.
provider_user_trust_requiredDas Level würde es zulassen und zu genau diesem Inhalt hat bisher noch kein einziger Mensch Ja gesagt.Bringen Sie den Player zur Mods-Liste und lassen Sie ihn dieses Paket bestätigen. Das Level würde es zulassen und zu genau diesem Inhalt hat noch niemand Ja gesagt, was der einzige Schritt ist, den eine Signatur bewusst nicht ersetzt.
quest_already_appliedEin Befehl, der bereits ausgeführt wurde.Nichts zu reparieren. Der Befehl wurde bereits ausgeführt und nicht wiederholt. Dadurch wird verhindert, dass beim Nachladen eine Belohnung zweimal ausgezahlt wird.
quest_carries_expressionEin Paket, das versucht, etwas zu tun oder die „einmalige“ Antwort für sich zu behalten.Entfernen Sie das Feld. Level 1 sind Daten: Was läuft, gehört zum Spiel, und neue Features kommen von einem vertrauenswürdigen Anbieter.
quest_ending_unreachableEin Ende, das niemand erreichen kann.Das Ende erfordert eine Mission, die in seinem Handlungsbogen nicht enthalten ist. Fügen Sie die Mission zu den Phasen des Bogens hinzu oder fordern Sie eine an, die dort vorhanden ist.
quest_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
quest_nothing_appliedEin Plan, der etwas ablehnte, sodass nichts ausgeführt wurde.Etwas im Set wurde abgelehnt, daher wurde nichts angewendet. Platzieren Sie eventuelle Ablehnungen im Bericht: Eine halb aufgesetzte Verbeugung ist ein Zustand, den niemand beschreiben kann.
quest_over_budgetEin Paket oberhalb einer angegebenen Obergrenze.Der Bericht druckt, was gemessen wurde, neben dem, was erlaubt war. Teilen Sie den Datensatz auf oder entfernen Sie Einträge außerhalb der Zeile: Die Obergrenze ist das, was ein Bildschirm oder ein Lesegerät aufnehmen kann, kein Vorschlag.
quest_text_not_keyEin Satz, bei dem ein Katalogschlüssel benötigt wird.Verschieben Sie die Phrase in Ihren Sprachkatalog und geben Sie ihren Schlüssel in das Feld ein. Ein Feld, das mit _key endet, enthält einen Schlüssel; Ein Satz drin sorgt dafür, dass Ihr Paket für immer in einer Sprache bleibt.
quest_unfinishableEine Mission, die niemand erfüllen kann.Geben Sie der Mission mindestens ein nicht optionales Ziel, andernfalls ist sie in dem Moment abgeschlossen, in dem sie angenommen wird.
quest_unknown_stepEin Ziel oder Zugeständnis, das dieser Build nicht hat.Der Name ist nicht in der veröffentlichten Liste für diese Tabelle enthalten. Wählen Sie einen aus, der vorhanden ist: Die Liste ist kurz, da jeder Eintrag etwas ist, was dieser Build bereits tut.
quest_unresolved_referenceEin benannter Datensatz, den niemand bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
relationship_band_gapEin Intervall mit einem Wert, für den es keine Bandnamen gibt.Decken Sie den gesamten Bereich Ihrer Police ab, vom Boden bis zum Dach, ohne Lücken und ohne Überlappungen, und verwenden Sie ausschließlich die veröffentlichten Bereichsnamen. Ein Wert in einem Loch ist ein Wert, den kein Bildschirm benennen kann.
relationship_carries_behaviour_codeEin Paket, das versucht bereitzustellen, was ausgeführt wird, wenn sich ein Bericht ändert.Entfernen Sie das Feld. Level 1 sind Daten: Was läuft, gehört zum Spiel, und neue Features kommen von einem vertrauenswürdigen Anbieter.
relationship_declares_live_stateEin Paket, das zu sagen versucht, wo eine Beziehung jetzt ist.Deklarieren Sie stattdessen den Anfangswert. Wo eine Beziehung jetzt steht, ist eine Frage der Laufzeit, und es ist der Spieler, der sie bewegt hat.
relationship_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
relationship_leave_unreachableEin Begleiter, der niemals gehen kann oder sofort geht.Verschieben Sie den Abbruchschwellenwert in den Richtlinienbereich. Auf dem Boden können Sie Ihren Partner nie verlieren; Über dem Dach geht er am ersten Abend.
relationship_origin_lostDas Paket, das eine Bindung deklariert hat, ist verschwunden und der entwickelte Wert bleibt bestehen.Nichts zu reparieren. Das Paket, das es deklariert hat, ist verschwunden und das Paket, das der Spieler verdient hat, bleibt; Der Ausweis ist da, sodass er weiß, was ihn zurückbringen würde.
relationship_pair_collisionEin ordentliches Paar erklärte zweimal, dass es keine Verbindung mehr gäbe.Zwei Datensätze beanspruchen dasselbe geordnete Paar. Löschen Sie eines: Wenn Sie beide behalten, gewinnt das Paket, das zuerst geladen hat.
relationship_unknown_relationEine Art Beziehung oder Rekrutierungsweg, die dieser Build nicht hat.Wählen Sie eine Beziehung aus der veröffentlichten Liste aus. Eines, das dieser Build nicht hat, würde auf nichts reduziert werden, und die Geschichte, die Sie geschrieben haben, würde nicht passieren.
relationship_unresolved_referenceEin benannter Datensatz, den niemand bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
resolution_cache_invalidatedArtikel wurden gelöscht, weil ihr Lieferant nicht mehr aktiv ist.Nichts zu reparieren. Die Zusammensetzung hat sich geändert, sodass die Auflösung der IDs neu berechnet und nicht wiederverwendet wurde.
resolution_missingNiemand stellt die ID zur Verfügung und es gibt nichts, auf das man zurückgreifen kann.Installieren Sie das Paket, das die ID bereitgestellt hat, neu oder korrigieren Sie die ID. Der Bericht speichert es, damit Sie nachvollziehen können, welches der beiden Dinge passiert ist.
resolution_over_budgetEin Paket oder Prozess, der über ein angegebenes Budget hinausgeht.Der Bericht druckt, was gemessen wurde, neben dem, was erlaubt war. Teilen Sie den Datensatz auf oder entfernen Sie Einträge außerhalb der Zeile: Die Obergrenze ist das, was ein Bildschirm oder ein Lesegerät aufnehmen kann, kein Vorschlag.
resolution_refusedEine Anfrage, die dieser Build nicht stellt.Lesen Sie die Regel, die im Bericht erwähnt wird, und ändern Sie die ID in etwas, das der Ort akzeptiert.
resolution_restart_requiredEine Profiländerung, deren alte Bytes nicht heruntergeladen werden können.Was diese ID auflöst, wird auf eine Weise geändert, die ein laufendes Spiel nicht verfolgen kann. Starten Sie neu, um es zu erhalten.
resolution_tombstonedEine bekannte ID, die ein Paket entfernt hat.Installieren Sie das Paket neu, um den Originalinhalt des Tombstones wiederherzustellen. Die ID wird zu ihrem Grabstein aufgelöst und nicht zu nichts, was genau der Grund ist, warum der Spieler bei einer Neuinstallation seine Sachen zurückerhält.
save_campaign_absentDie Kampagne, unter der die Speicherung durchgeführt wurde, ist nicht installiert.Installieren Sie die Kampagne, die die Rettung nennt. Die Rettung wird nicht gegen einen anderen eröffnet, denn es wäre stillschweigend eine andere Welt.
save_composition_matchesNichts, was die Rettung aufgezeichnet hatte, bewegte sich.Nichts zu reparieren. Die Pakete, mit denen diese Speicherung durchgeführt wurde, sind die installierten Pakete.
save_content_absentInhalte, deren Speichernamen nicht installiert sind. Gemeldet, nicht tödlich.Installieren Sie die im Bericht aufgeführten Pakete neu. Die IDs bleiben im Speicher erhalten, sodass das, was jetzt keine Antwort hat, wieder eine bekommt.
save_orphan_state_carriedStaat ohne installierten Eigentümer, übertragen ohne Ausführung.Installieren Sie das Paket neu, damit dieser Zustand wieder eine Bedeutung hat. Es wurde beibehalten und nicht entfernt, damit es funktionierte.
save_provider_contract_movedEine Fähigkeit, auf die sich die Rettung verlassen hatte, reagiert nun auf einen anderen Vertrag.Überprüfen Sie, ob im Bericht „Migriert“, „Ignoriert“ oder „Abgelehnt“ steht. Die Vertragsversion eines Anbieters hat sich zwischen dem Speichern und jetzt geändert, und das sind die drei Antworten.
save_write_beside_originalDie Sitzung hat eine neue Datei geschrieben und das Original in Ruhe gelassen.Nichts zu reparieren. Der wiederhergestellte Speicherstand wurde neben das Original geschrieben und nicht darüber. Der abgesicherte Modus überschreibt niemals die Datei, die nicht geöffnet werden konnte.
selection_campaign_missingDie angeforderte Kampagne ist nicht installiert und an ihrer Stelle wurde nichts verfasst.Installieren Sie das Paket, das die Kampagnen-ID in der Nachricht bereitstellt, oder starten Sie eine andere Kampagne. Die ID ist das, wonach gefragt wurde, geschrieben so, wie sie angefordert wurde. Vergleichen Sie sie also mit der ID in der Campaign.json des Pakets. An seiner Stelle wurde nichts geladen: Wenn Sie das Basisspiel starten, erhalten Sie eine andere Welt unter dem Namen, den Sie geschrieben haben.
selection_madeEs wurde eine Kampagne mit Angabe des Grundes ausgewählt.Nichts zu reparieren. In dieser Zeile steht, um welche Welt es sich bei diesem Spiel handelt und warum es ausgewählt wurde. Sie ist lesenswert, wenn die Welt nicht Ihren Erwartungen entspricht: Die Vernunft sagt Ihnen, ob sie angefordert, wiederbelebt oder als einzige installiert wurde.
selection_safe_modePakete wurden ausgelassen, entweder nach einem fehlgeschlagenen Start oder weil der Player danach gefragt hatte.Lesen Sie den Grund, bevor Sie etwas ändern. „player_asked“ bedeutet, dass Sie es ausgewählt haben und daran nichts auszusetzen ist. boot_failed bedeutet, dass die Kampagne mehrmals nicht gestartet werden konnte: Deaktivieren Sie die zuletzt installierten Mods, starten Sie sie einmal und setzen Sie sie einzeln wieder ein. Im abgesicherten Modus wird kein Paket zusammengestellt, sodass eine Übereinstimmung, die hier funktioniert, besagt, dass der Fehler in einem Paket liegt.
selection_save_preservedEin wiederhergestellter Speicherstand wurde neben dem Original statt darüber geschrieben.Es gibt nichts zu reparieren und die zweite Datei nicht zu löschen. Recovery hat das Ergebnis neben Ihren Speicherstand geschrieben und nicht darüber, sodass die Nachricht beide Pfade nennt: Das Original ist das ohne das Suffix .recovered und es ist immer noch genau so, wie es war.
setting_invalidDie Aussage entspricht nicht der Aussage, die dieser Build nach sich ziehen würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
setting_migratedEin Wert ist unter einem alten Schlüssel angekommen und wurde auf den aktuellen portiert.Nichts zu reparieren. Die Einstellung änderte sich in ihre aktuelle Form und der alte Wert trat zurück.
setting_owner_missingEin gespeicherter Wert gehört zu einem Paket, das nicht installiert ist. Erhalten, nicht angewendet.Benennen Sie einen erklärten Eigentümer für die Einstellung. Eine Einstellung, die dieser Build nicht hat, ist eine Einstellung, die niemand jemals lesen würde.
setting_restart_requiredDer Wert hat sich geändert und kann erst beim nächsten Start wirksam werden.Starten Sie neu, um es anzuwenden. Während das Spiel läuft, kann die Einstellung nicht geändert werden.
setting_secret_withheldEin Geheimnis wurde von einer Speicherung oder einem Bericht ausgeschlossen.Nichts zu reparieren. Ein als geheim gekennzeichneter Wert wurde im Bericht weggelassen, weshalb der Bericht in einen Bug-Thread eingefügt werden kann.
setting_value_refusedEin Wert außerhalb dessen, was die Deklaration zulässt. Stattdessen reagiert der Standardwert.Geben Sie den Wert innerhalb des daneben aufgedruckten Bereichs ein oder wählen Sie einen aus der veröffentlichten Liste aus. Der Bericht zeigt beides.
settlement_building_unresolvedEin gerettetes Gebäude, dessen Paket verschwunden ist und benannt und nicht ersetzt wurde.Installieren Sie das in der Nachricht erwähnte Paket neu, um das Gebäude zurückzubekommen, oder lassen Sie es in Ruhe: Es ist nichts verloren gegangen. Das Gebäude befindet sich immer noch unter seiner ID im Speicher und wurde absichtlich nicht durch das nächstgelegene Gebäude dieses Gebäudes ersetzt, was dazu geführt hätte, dass die Waren eines anderen in eine Schmiede gelangt wären, die Sie nie gebaut haben.
settlement_carries_pathEin Datensatz, der eine eigene Szene, ein Drehbuch oder einen Ort benennt.Entfernen Sie das Feld und benennen Sie stattdessen eine ID. Ein Innenraum ist die ID eines Innendatensatzes, niemals der Pfad einer Szene, und ein Gebäude wird durch Benennung eines Objekts auf der Karte platziert, anstatt seine eigenen Koordinaten zu tragen. Standortfelder werden aus diesem zweiten Grund abgelehnt: Ein Datensatz, der eine Koordinate enthält, kann wer weiß wo landen, wenn seine Karte nicht mehr vorhanden ist.
settlement_invalidEin Abrechnungsdatensatz, den dieser Build nicht lädt.Lesen Sie das Urteil neben dem Code und korrigieren Sie den Datensatz, den er benennt. Die üblichen Ursachen sind ein ausgelassenes Pflichtfeld, eine ID ohne vorangestellten Paketnamensraum und ein Feld, das zu einem der anderen fünf Datensatztypen gehört.
settlement_loot_table_absentEin Container, dessen Beutetabelle zusammen mit seinem Paket verschwunden ist, sodass er leer ist und nicht aus einem anderen entnommen werden kann.Installieren Sie das Paket, das die Beutetabelle bereitgestellt hat, erneut, wenn der Container erneut gefüllt werden soll. Es ist eher leer, als dass es von einem anderen Tisch gezogen wird, denn das Ziehen würde die Dinge einer anderen Welt unter dem Namen dieser Welt liefern.
settlement_over_budgetMehr Gebäude oder Dienstleistungen, als eine Siedlung enthalten kann.Entfernen Sie einen Teil dessen, was in der Nachricht gezählt wurde, oder teilen Sie die Abrechnung in zwei Teile. Die Anzahl und die Obergrenze sind beide in der Nachricht enthalten, der Unterschied besteht also darin, wie viele herauskommen müssen.
settlement_text_not_keyEin auf dem Bildschirm angezeigtes Feld, das eine Phrase anstelle eines Katalogschlüssels enthält.Ersetzen Sie die Phrase durch einen Katalogschlüssel und tragen Sie die Phrase in Ihre Sprachtabelle ein. Ein im Datensatz geschriebener Name kann nicht übersetzt werden und wird in allen Sprachen auf Englisch angezeigt.
settlement_unreachable_serviceEin Dienst, der an einem Ankerplatz angeboten wird, der auf der Karte nicht ausgewiesen ist.Fügen Sie den Anker zur Ankerebene der Karte mit der ID hinzu, die der Dienst benennt, oder benennen Sie den Dienst in eine dort vorhandene um. Der Datensatz und die Karte sind jeweils für sich legitim, und das Ergebnis ist ein Zähler, an dem niemand stehen kann.
settlement_unresolved_referenceEin Datensatz, der etwas benennt, das niemand bereitstellt.Fügen Sie den benannten Datensatz zu Ihrem Paket hinzu oder korrigieren Sie die ID. Die Nachricht benennt sowohl den Datensatz, auf den sie zeigte, als auch die ID, auf die sie zeigte, und vergleicht sie dann mit den von Ihnen deklarierten IDs.
society_dimension_leakEs wurde festgestellt, dass eine Dimension der Identität zu einer anderen führt.Entfernen Sie das Feld, das die andere Dimension benennt. Eine Kultur hat kein Glaubensfeld: Die Ableitung muss unmöglich zu schreiben und nicht einfach nicht ratsam sein, damit nichts einer Fraktion einen Glauben geben kann, den niemand geschrieben hat.
society_heraldry_pathEin Zeichen, das eine Datei anstelle eines Grundes benennt.Ein heraldisches Abzeichen namens a. Nennen Sie stattdessen einen Grund: Ein Zeichen wird aus denen ausgewählt, die dieser Build entwirft.
society_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
society_mutation_in_definitionEine Definition, die Sie auffordert, etwas zu tun.Entfernen Sie das Feld. Definitionsadapter beschreiben; Sie haben keine Autorität, das zu ändern, was sie beschreiben.
society_relationship_collisionDas gleiche geordnete Paar wurde zweimal deklariert.Ein geordnetes Paar wurde zweimal deklariert, daher hat das Paar keine Position. Löschen Sie eines. Wenn Sie beide beibehalten, hängt die Welt davon ab, welches Paket zuletzt geladen wird.
society_relationship_one_sidedEine Position, deren Gegenteil niemand erklärt hat; das Gegenteil ist der Standardwert.Es gibt nichts zu reparieren, wenn Sie es wollten. Nur eine Richtung dieses Paares ist deklariert, und das nicht deklarierte Gegenteil ist die Standardeinstellung: Eine Fraktion, die nicht weiß, dass sie einen Feind hat, ist eine Prämisse, und diese Linie soll hier eine gewählte Prämisse sein.
society_unresolved_referenceEin benannter Datensatz, den niemand bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
state_namespace_ignoredDas Paket liest diesen Zustand nicht mehr.Deklarieren Sie den Namespace oder entfernen Sie den Status. Es fiel unter eine Regelung, die niemand für sich beansprucht, und wurde eher in Ruhe gelassen als durchgesetzt.
state_namespace_malformedEin Namespace im Speicher ist kein Name, den dieser Build akzeptieren würde.Schreiben Sie einen Namensraum, der ein Paket eindeutig identifiziert. Alles, was in einer Rettung steckt, hängt darunter, also war eine Form, die wir nicht lösen können, die, dass dann niemand Anspruch darauf erheben kann.
state_namespace_orphanedKeine installierten Pakete haben diesen Status und wurden weitergeleitet.Installieren Sie das Paket erneut, um seinen Zustand wiederherzustellen. Der Namespace gehört zu einem, der nicht mehr vorhanden ist, und der Status wurde beibehalten und nicht gelöscht.
state_namespace_rejectedDas Paket hat seinen gespeicherten Status für diese Sitzung abgelehnt.Das Paket hat versucht, außerhalb des Namensraums zu schreiben, der ihm gehört. Schreiben Sie in Ihr eigenes Paket: Der Status eines anderen Pakets kann nicht von Ihnen geändert werden.
state_namespace_reservedEin Paket hat einen Namespace beansprucht, der zum Host gehört.Der Namespace ist einer des Gastes. Nehmen Sie das aus Ihrem Paket.
state_schema_futureWurde aus einer neueren Paketversion als dieser Build geschrieben.Aktualisieren Sie das Paket. Der gespeicherte Zustand wurde von einer neueren Version als der installierten geschrieben, und wir rechnen nicht damit, einen Zustand wiederherzustellen.
state_schema_migratedÄltester Bauzustand, dem Paket zum Weitertransport übergeben.Nichts zu reparieren. Ein älterer Zustand wurde durch die Migration des Pakets selbst in seine aktuelle Form gebracht.
state_schema_too_oldGeben Sie an, dass es älter ist als der Boden, den das Paket angeblich lesen kann.Sehen Sie, welche Antwort laut Bericht das Paket gewählt hat. Der Status ist älter als die älteste Form, aus der das Paket migriert, und entscheidet daher, was damit geschehen soll.
state_write_outside_namespaceDer Autor hat einen Namensraum angesprochen, der nicht ihm gehört.Schreiben Sie in Ihren Namensraum. Wenn ein Paket den Status eines anderen ändert, bedeutet dies, dass ein Speicherstand nicht mehr jemandem gehört.
strategic_carries_policyEin Paket, das versucht, die Regel selbst bereitzustellen.Entfernen Sie das Feld. Level 1 sind Daten: Was läuft, gehört zum Spiel, und neue Features kommen von einem vertrauenswürdigen Anbieter.
strategic_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
strategic_over_budgetEin Paket oberhalb einer angegebenen Obergrenze.Der Bericht druckt, was gemessen wurde, neben dem, was erlaubt war. Teilen Sie den Datensatz auf oder entfernen Sie Einträge außerhalb der Zeile: Die Obergrenze ist das, was ein Bildschirm oder ein Lesegerät aufnehmen kann, kein Vorschlag.
strategic_text_not_keyEin Satz, bei dem ein Katalogschlüssel benötigt wird.Verschieben Sie die Phrase in Ihren Sprachkatalog und geben Sie ihren Schlüssel in das Feld ein. Ein Feld, das mit _key endet, enthält einen Schlüssel; Ein Satz drin sorgt dafür, dass Ihr Paket für immer in einer Sprache bleibt.
strategic_unknown_termEine Überlegung, eine Absicht oder eine Klasse, die dieser Build nicht hat.Das Wort ist nicht in der veröffentlichten Liste für dieses Feld enthalten. Wählen Sie eines, das existiert: Auf ein Wort, das wir nicht haben, würde nichts antworten.
strategic_unresolved_referenceEin benannter Datensatz, den niemand bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
strategic_weightlessEin Planer, der immer gleich entscheiden würde.Geben Sie mindestens einer Überlegung eine andere Gewichtung als Null. Alle Gewichtungen auf Null geben jeder Option die gleiche Punktzahl und wählen immer die erste in alphabetischer Reihenfolge.
theme_carries_executableEin Thema, das eine Szene, ein Skript oder einen Asset-Pfad benannt hat.Entfernen Sie das Feld. Ein Thema beschreibt, wie Sie Dinge sehen; Ein Skript innerhalb eines Themes ist ein Programm, das hinter jedem Bildschirm ausgeführt wird.
theme_contrast_too_lowEin Farbpaar unterhalb des minimalen Kontrastverhältnisses.Verschieben Sie den Vordergrund oder Hintergrund, bis das Verhältnis das daneben aufgedruckte Mindestverhältnis überschreitet. Es ist die einzige Themenregel, die ein Spieler direkt hört.
theme_refusedEin Thema, das dieser Build nicht registriert.Lesen Sie die Eigenschaft, die der Bericht benennt, und melden Sie sie im zulässigen Rahmen.
tombstone_blocks_campaignDie deklarierte Familie, ohne die die Kampagne nicht geladen wird.Diese Familie trägt etwas und ihr Paket fehlt, sodass die Kampagne nicht startet. Installieren Sie es neu: Ohne es zu verlassen, wäre eine Welt, in der etwas fehlt, auf das überall Bezug genommen wird.
tombstone_placeholder_substitutedAn seiner Stelle antwortet ein vom Motor besessener Stellvertreter.Installieren Sie das Paket erneut, um den echten Inhalt wiederherzustellen. Aus dem Bericht geht hervor, welcher Ersatz zwischenzeitlich verwendet wurde.
tombstone_recordedEine ID, deren Paket verschwunden ist, wurde registriert statt entfernt.Nichts zu reparieren. Ein Paket ist weg und seine IDs bleiben im Speicher übrig. Dies ist der einzige Grund, warum der Spieler bei einer Neuinstallation seine Inhalte zurückerhält.
tombstone_reinstall_recoveredDas Paket ging zurück und der Grabstein löste sich wieder in echten Inhalt auf.Nichts zu reparieren. Das Paket ist zurück und seine Grabsteine ​​lösen sich wieder in echten Inhalt auf.
tombstone_unresolved_referenceEtwas im Speicher deutet immer noch darauf hin, dass die ID auf einen Grabstein reduziert wurde.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
unit_carries_behaviour_codeEin Paket, das versucht, ein bestimmtes Verhalten bereitzustellen.Entfernen Sie das Feld. Level 1 sind Daten: Was läuft, gehört zum Spiel, und neue Features kommen von einem vertrauenswürdigen Anbieter.
unit_incomplete_for_categoryEine Einheit, der es an den Anforderungen ihrer Kategorie mangelt.Fügen Sie den Teil hinzu, den die Kategorie erfordert. Die Kategorietabelle listet sie auf: Ein Gefährte braucht Ausrüstung, eine Truppe braucht Verhalten und ein Anführer greift nie auf eine zurück.
unit_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
unit_unknown_behaviourEin Verhaltensprofil, das dieser Build nicht hat.Wählen Sie ein Verhaltensprofil aus der veröffentlichten Liste. Einer, den dieser Build nicht hat, wird eher abgelehnt als durch einen Standard ersetzt, denn ein Boss, der stillschweigend zum Wanderer geworden ist, ist ein Kampf, der nicht stattfindet.
unit_unresolved_referenceEin benannter Datensatz, den niemand bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.
unit_visual_missingEin Aspekt wurde bei seiner Ersetzung gelöst.Der von Ihnen erwähnte Aspekt ist nicht vorgesehen, daher wurde ein Ersatz dieses Typs verwendet. Bringen Sie die Ressource oder den Punkt zu einer vorhandenen Ressource.
world_calendar_inconsistentEin Kalender oder eine Party, die nicht stattfinden kann.Platzieren Sie das Paar, das im Bericht erwähnt wird. Jahreszeiten, Monate und Feiertage müssen übereinstimmen, und einer, der nicht übereinstimmt, ist ein Kalender, den die Welt auf zwei Arten liest.
world_carries_clock_controlEin Paket, das seine eigene Zeit zur Verfügung stellt.Entfernen Sie das Feld. Ein Paket gibt an, wie viel eine Saison wert ist, und kann die Uhr nicht bewegen: Die kanonische Uhr hat nur einen Besitzer.
world_carries_randomnessEin Paket, das seine eigene Zufälligkeit bereitstellt.Entfernen Sie den Samen und benennen Sie stattdessen einen Fluss. Der Seed der Übereinstimmung gehört dem Host und der Fluss folgt von ihm, sodass ein Paket, das seinen eigenen Seed trägt, eine Welt ist, die die Übereinstimmung, in der es sich befindet, ignoriert.
world_invalidDer Datensatz ist keiner, den dieser Build laden würde.Lesen Sie das Urteil neben dem Kodex. Nennen Sie die eine Regel, gegen die der Rekord verstoßen hat, und jede davon ist ein zu entfernendes Feld, ein hinzuzufügendes Feld oder ein zu änderndes Wort.
world_unresolved_referenceEin benannter Datensatz, den niemand bereitstellt.Die benannte ID ist eine, die nichts in der Komposition bereitstellt. Entweder tragen Sie den Datensatz bei sich, auf den er verweist, oder Sie sind auf das Paket angewiesen, auf dem er sich befindet.

Grenzen, Speichern, Teilen

Was ein Mod niemals kann

Vom Build abgelehnt, nicht entmutigt.

Kein CodeSkripte, Erweiterungen, ausführbare Dateien, Shell-Dateien – überall in Ihrem Paket.
Keine Szenen oder RessourcendateienEin Datensatz, der auf einen verweist, wird abgelehnt, auch wenn die Datei nicht vorhanden ist.
Keine Verdunkelung der BasisdateienEin Mod fügt Datensätze hinzu und ändert sie; Es kann keine Spieldateien ersetzen.
Keine neue Art von SacheEin neues Privileg ja, eine neue Art von Privileg nein.
Keine Befehle, Autoloads oder ProjekteinstellungenÜberhaupt nicht erreichbar.
Keine tatsächlichen Stornierungenremove entfernt einen Datensatz aus dem Umlauf und lässt ihn auflösbar. Nur vendor_inventories nimmt einen weg.

Die genaue Liste, warum eine Ablehnung es erwähnt:

  • Eine Datensatzdatei kann 4 MB groß sein, 4.096 Datensätze enthalten und 16 Ebenen verschachteln. Der größte Katalog, den das Spiel mit sich bringt, enthält einige Hundert davon, sodass eine Datei, die eine dieser Einschränkungen auslöst, eher fehlerhaft als ambitioniert ist.
  • Dateien, die Ihr Paket überhaupt nicht enthalten darf, nirgendwo: .bat, .cmd, .dll, .dylib, .exe, .gd, .gdc, .gde, .gdextension, .ps1, .sh, .so, .vbs. Bei jedem davon handelt es sich um ein Verhalten: ein Skript, eine native Bibliothek oder etwas, das der Host ausführen würde.
  • Erweiterungen, auf die ein Datensatz nicht verweisen kann: .bat, .cmd, .dll, .dylib, .exe, .gd, .gdc, .gde, .gdextension, .ps1, .res, .scn, .sh, .so, .tres, .tscn, .vbs. Es handelt sich um die obige Liste plus Szenen und Assets, denn ein Datensatz, der einen benennt, verlangt vom Spiel, ihn zu erstellen.
  • Schlüssel wurden abgelehnt, egal, was sie enthalten: resource_local_to_scene, resource_path, scene, scene_path, script.
  • Pfade werden abgelehnt, wo auch immer sie erscheinen: Alles, was mit res:// oder user:// beginnt. Ein Datensatz leitet Inhalte innerhalb seines eigenen Pakets.

Für die Größe gibt es auch Obergrenzen, und zwar pro Paket und über alle hinweg, und das Überschreiten einer Obergrenze ist nicht immer eine Ablehnung:

  • ok Unterhalb des Grenzwerts. Es wird nichts gemeldet.
  • Warnung Über den weichen Schwellenwert hinaus und gleich geladen. Diejenigen, die etwas erschaffen, werden gewarnt; Der Player wird nicht gestoppt.
  • Herabsetzen Überschreitung des Größenlimits, das der Gast reduzieren kann, anstatt es abzulehnen. Es wird benannt, worauf es basiert, denn ein Spiel, das im Stillen anders läuft, ist schlimmer als eines, das sagt, warum.
  • ablehnen Die Grenze einer Dimension überschreiten, die keine kleinere Version von sich selbst hat. Das Paket wird nicht geladen und wird benannt.
GrößeEin PaketAlleWenn er darüber hinwegkommt
records20 000120 000reject
decoded_image_bytes256 MB1 GBreject
decoded_audio_bytes128 MB512 MBreject
map_cells4 194 3048 388 608reject
map_objects65 536262 144reject
effect_instances4 09616 384degrade
provider_frame_usec2 0008 000degrade
worker_tasks832reject
queue_depth5122 048degrade
teardown_msec100400warn

Bei einer Generalüberholung werden diese Zahlen verdoppelt, bei einem Komplettumbau werden diese Zahlen vervierfacht. Viermal, nicht unbegrenzt: Ein Limit, das ein Paket wegdeklarieren kann, ist kein Limit.

Nur die Entfernungslinie wird verschoben. Eine Familie akzeptiert einen remove, wenn es ihr gelingt, den Datensatz, der zurückgezogen wird, an den Lader zu liefern; Heute machen es zwei. Alles andere auf dieser Tabelle ist dauerhaft.

Es kommt keine Skriptebene. Das Manifest enthält eine Art Paket, das Verhalten anstelle von Daten versendet: Das einzige, was seine Ausführung autorisieren könnte, lehnt es ab, es gibt keine Sandbox dahinter und ein Paket, das es heute als abgelehnt erklärt. Design für Daten.

Lesen Sie „Daten“ im weitesten Sinne. Zahlen sind Daten. Balancieren ist Daten. Was eine Waffe bewirkt, wie viel eine Wunde kostet, wie viel eine Ware kostet, wie eine Fraktion eine Entscheidung abwägt: Alles liegt bei Ihnen. Was keine Daten sind, ist eine Mechanik, die das Spiel nie hatte – das ist Code, den jemand schreibt und testet. Wenn Ihre Idee es braucht, ist es ein anderes Spiel und kein Mod.

Spart

Ihre IDs landen in der Speicherdatei des Players. Eine veröffentlichte ID ist ein Versprechen.

RegelWarum
Niemals eine ID umbenennenAlle Rettungskräfte, die es genutzt haben, bleiben gestrandet. Fügen Sie ein neues hinzu und lassen Sie das alte in Ruhe.
Durch die Deinstallation werden niemals die Inhalte eines Spielers gelöschtBeim Speichern bleiben die IDs erhalten, die nicht aufgelöst werden können, und werden markiert, sodass bei einer Neuinstallation der Tresor wiederhergestellt wird.
Erhöhe version jedes Mal, wenn du etwas änderstEs ist das, was ein Spieler sehen kann.

In jeder Hinsicht kann sich eine Reihe von Paketen von denen unterscheiden, unter denen sie gespeichert wurden. Sie haben einen Namen, und jeder Name entscheidet über eines: ob die Sitzung in diese Datei schreiben kann.

UrteilEs kann Ihren Speicherstand schreibenWas bedeutet es
compatibleJaDie Zusammensetzung entspricht derjenigen, unter der die Ersparnis vorgenommen wurde.
degradedJaVerstanden, einige benannte Inhalte fehlen. Das Spiel geht weiter und die Abwesenheit wird gemeldet.
incompatibleNein, die Datei bleibt in RuheDie Sitzung kann nicht berücksichtigen, was in der Speicherung steht. Die Originaldatei bleibt in Ruhe.
Was ist andersUrteilWas bedeutet es
identical_compositioncompatibleGleiche Pakete, gleiche Versionen, gleiche Zusammensetzung.
mod_addedcompatibleEin Paket, von dem die Rettung nie etwas wusste. Nichts, was er aufgezeichnet hatte, bewegte sich.
mod_missingdegradedEin Paket mit dem Namen Save ist nicht installiert. Seine Ausweise sind immer noch in der Datei und bleiben dort.
mod_upgraded_compatibledegradedEin Paket hat sich geändert, obwohl die angegebene Kompatibilität weiterhin gewährleistet ist. Wird gemeldet, weil ein geänderter Hash eine geänderte Antwort ist, selbst wenn es sich um eine legitime Antwort handelt.
provider_contract_incompatibleincompatibleEine Kapazität, auf die sich die Rettung verlassen hatte, antwortet durch einen Lieferanten, dessen Vertrag verschoben wurde. Um vorwärts zu kommen, müsste man erraten, was es bedeutet.
conversion_missingincompatibleDie Kampagne selbst fehlt. Jede ID in der Datei gehört zu einer Welt, die nicht installiert ist.
safe_mode_disableddegradedDie Sitzung begann mit absichtlich deaktivierten Paketen. Der Speicher ist lesbar und sein geänderter Inhalt ist optional nicht vorhanden.
orphan_state_preserveddegradedDer Zustand, dessen Paket verschwunden ist, bleibt unversehrt bestehen. Erhalten, nie aufgeführt.

Lesen Sie die Zeile incompatible zweimal: Der ursprüngliche Speicher bleibt erhalten. Eine Datei, die von einer Sitzung überschrieben wurde, die sie nicht verstanden hat, ist ein verlorenes Spiel, und ein Spieler, der eines aufgrund eines Mods verliert, installiert kein neues.

Jedes geladene Paket erhält einen Fingerabdruck: Das Gleiche gilt für dasselbe Manifest und denselben Inhalt, anders, wenn sich die Inhaltsdatei ändert. Der zusammengesetzte Set-Digest enthält auch die ID, Version, Ladereihenfolge und den Inhalts-Digest jedes Pakets, sodass dieselben Pakete in einer anderen Reihenfolge nicht vorgeben können, dieselbe Zusammensetzung zu haben. modding_fingerprint_report druckt diese Werte und speichert das Schema. v56 zeichnet die Liste der aktiven Fingerabdrücke auf, sodass Sie bei einem späteren Ladevorgang auf ein fehlendes oder geändertes Paket aufmerksam gemacht werden können. Eine Erhöhung Ihres version ist immer noch notwendig, da es sich um den Wert handelt, den ein Spieler vor der Installation sehen und vergleichen kann.

Teilt es

Komprimieren Sie den Ordner in eine ZIP-Datei. Das Verteilungsformat finden Sie hier. Es gibt keinen Katalog im Spiel; Legen Sie es auf Nexus Mods.

SchrittWas
ÜberprüfenReinigen Sie den Validator vor dem Laden mit --strict.
ReißverschlussDerselbe Ordner, daher enthält das Archiv my_mod/mod.json.
VersionErhöht version bei jedem Ladevorgang auf mod.json.
AnforderungenListen Sie Ihren dependencies auch auf der Nexus-Seite auf.
Aus'Welche Familien Sie berühren und welche IDs Sie mit override überschreiben.

Ändern Sie niemals den id Ihres Pakets. Es ist der Namespace, der jede Ihrer IDs trägt, was ein anderes Paket als Abhängigkeit nennt und was ein Speichervorgang schriftlich festlegt. Wenn Sie es umbenennen, wird bei jedem vorhandenen Speicher davon ausgegangen, dass Ihr Paket deinstalliert wurde und ein anderes daneben aufgetaucht ist. Ändern Sie stattdessen den angezeigten name.

Sagen Sie den Leuten zwei Dinge und Sie ersparen sich mehr Supportanrufe als mit jedem anderen: den game_version, gegen den Sie gebaut haben, und ob Sie canon_safe einsetzen.

Die heute zu schreibende Version ist 0.0.0-dev. Es ist die Zahl, auf die dieser Build reagiert, und es ist diejenige, die in jedem Beispiel auf dieser Seite angegeben wird, und es ist eine einzelne Zahl statt eines Bereichs: Wenn das Spiel herauskommt, wird es sich zuerst hier ändern.

Archive haben Grenzen, die durch den Header und nicht nach der Extraktion bestimmt werden:

  • Maximal 4.096 Einträge, keiner größer als 16 MB, und insgesamt 128 MB extrahiert.
  • Ein Name kann 200 Zeichen und 8 Ordner lang sein.
  • Nichts kann von sich behaupten, mehr als das 200-fache zu expandieren, was kein ehrlicher Inhalt erreicht: Der Text wird um das Fünfzehnfache komprimiert. Ein paar Kilobyte, die in Gigabyte extrahiert werden, ist der Angriff, für den diese Zahl existiert.
  • Ein anderer Eintrag als eine einfache Datei oder ein einfacher Ordner wird abgelehnt: Symlink, Hardlink, Gerät, FIFO, Socket. Auf den symbolischen Link kommt es an, denn sein Name kann völlig gewöhnlich sein und wenn man ihm folgt, schreibt man, wohin er zeigt.
  • Ein Archiv in Ihrem Archiv wird abgelehnt statt gemessen (.7z, .bz2, .gz, .pck, .rar, .tar, .xz, .zip). Der äußere erklärt, wie weit sich seine Stimmen ausbreiten; es kann nicht angeben, wie weit die eines internen reichen.

Es gibt heute keinen Store, in den man posten kann, und das ist die Form dessen, was dort sein wird. Die Verteilung erfolgt jetzt über die ZIP- und Nexus-Seite oben: Nichts von dem, was folgt, ist ein Feld, das Sie für einen Upload ausfüllen, den Sie diese Woche durchführen können. Es ist hier, weil die Felder bereits im Build deklariert sind, sodass eine Route zu einem Store eine Frage des Einsteckens und nicht des Erfindens ist, und weil ein heute geschriebenes Paket nicht neu geschrieben werden muss, um auf diese Weise zu reisen.

Ein Paket, das durch ein Geschäft reist, trägt mehr Dinge als der Ranzen:

Was bringt esFelder
Wer iststable_id, version
Woher es kommtauthor, license, source_url, package_hash
Was sagt ein Shop dazu?content_rating, content_warnings, revocation_status
Wie es geliefert wurdestore, store_id, subscription_id
ZustandEs wird installiertWas bedeutet es
noneJaEs wurde nichts gemeldet.
reportedJaJemand hat es gemeldet und es wurde nichts entschieden. Der Spieler wird benachrichtigt und wählt.
quarantinedNEINWird bis zur Entscheidung festgehalten. Es wird nicht installiert und bereits installierte Inhalte werden nicht gelöscht.
revokedNEINZurückgezogen. Es wird nicht installiert und eine installierte Kopie wird deaktiviert und nicht entfernt, da die gespeicherten Spiele des Spielers ihren Inhalt weiterhin benennen.

Die beiden Zustände, die eine Installation blockieren, löschen immer noch nichts.

Was ein neuer Build mit Ihrem Paket bewirken kann

game_version ist kein Ornament. Das Spiel vergleicht das, wogegen Sie gebaut haben, mit dem, was es ist:

UrteilWas bedeutet es für Sie?
supportedDer Build, den Sie genannt haben, ist dieser oder kommt ihm nahe. Nichts zu tun.
older_buildSie haben sich gegen ein älteres Spiel durchgesetzt. Es wird trotzdem geladen, und die mögliche Überraschung würde aus dem resultieren, was sich in der Zwischenzeit bewegt hat.
newer_buildSie haben gegen ein neueres Spiel als das gespielte gespielt. Das Paket wird als solches benannt und nicht halb geladen, in der Hoffnung, dass alles, was es verwendet, bereits vorhanden ist.
unreadableDer von Ihnen geschriebene game_version ist keine Version. Das ist immer ein Tippfehler.

Was Sie dagegen tun, hängt davon ab, was sich bewegt hat:

KlasseWas bedeutet esWas schuldet Ihnen das Spiel?
unverändertNichts, was ein Paket beobachten kann, hat sich bewegt.keiner
ZusatzstoffEs gibt etwas Neues und alles, was da war, bedeutet immer noch, was es einmal bedeutete.ein kleinerer Anstieg
brechenEin auf die alte Oberfläche geschriebenes Paket kann jetzt fehlerhaft sein, ohne dass es geändert wurde.eine größere Steigerung

Eine Änderung gilt aus einem dieser Gründe als Abbruch: field_removed, default_changed, type_changed, constraint_changed, required_added, operation_removed, root_changed, format_changed, id_field_changed, catalogue_changed, family_removed, contract_major_changed_without_new_id. default_changed ist derjenige, der additiv aussieht, es aber nicht ist. Ein Feld, dessen Standardverschiebungen das Verhalten jedes Pakets neu schreiben, das es nie erwähnt hat und von dem keiner seiner Autoren etwas geändert hat. constraint_changed deckt Grenzwerte und Aufzählungen ab, während Root, Format, ID-Feld, andere Katalogmetadaten und Familienentfernungsänderungen ändern, wo oder ob ein Paket gelesen werden kann.

Ein Name, der nicht mehr unterstützt wird, ist veraltet, bevor er entfernt wird, und funktioniert nach der Veröffentlichung, die ihn veraltet hat, noch für mindestens zwei Nebenversionen.

Politik, in vier Sätzen

Wer darüber entscheidet, ob er hundert Stunden in ein Paket investiert, stellt eigentlich nur eine Frage: Was passiert mit ihm, wenn das Spiel aktualisiert wird? Hier ist die Antwort, bevor es eine Liste zum Lesen gibt.

AnfrageAntwort
Wird mein Paket trotzdem geladen?Ja, es sei denn, eine Veröffentlichung ist unten als aktuell aufgeführt und keine Veröffentlichung ist fehlerhaft, ohne vorher dort zu erscheinen.
Werden Spielerwürfe überleben?Ja. Eine Sitzung, die einen Speichervorgang nicht verstehen kann, weigert sich, darauf zu schreiben, anstatt ihn zu überschreiben, und ein Speichervorgang behält die IDs, die er nicht auflösen kann, anstatt Dinge zu löschen. Speichert.
Wie lange erhalte ich eine Benachrichtigung?Ein Name ist veraltet, bevor er entfernt wird, und funktioniert für mindestens zwei Nebenversionen nach der Veröffentlichung, die ihn veraltet hat, weiterhin.
Woher soll ich das wissen?Die Zeile landet in der Tabelle unten mit dem, was vor der Veröffentlichung, zu der sie gehört, verschoben und geändert wurde.

Veröffentlichungen, die Pakete zerstören

FreigebenDatumWas kaputt gehtWas zu tun
Immer noch nichts. Keine Veröffentlichung hat ein Paket kaputt gemacht.

Die Tabelle ist leer und kein Platzhalter. Sie existiert jetzt, damit die erste Zeile einen Platz zum Landen hat und damit das obige Versprechen aufgeschrieben wird, bevor es getestet wird, und nicht erst danach. Eine Zeile hier nennt die Veröffentlichung, den Tag ihrer Veröffentlichung, genau die Form, in der sie nicht mehr akzeptiert wurde, und die Änderung, die ein Paket behebt – keine „verschiedenen Änderungen“.

Eingehende Arbeiten, die etwas kaputt machen würden, werden vor dem Verlassen in derselben Tabelle als „ankommend“ markiert.

Wenn das Spiel nicht startet

Ein Profil, das nicht gestartet werden kann, wird eine begrenzte Anzahl von Malen erneut versucht. Anschließend bietet das Spiel einen Weg zurück, anstatt es endlos zu versuchen.

Ein Profil wird dreimal wiederholt. Danach hört das Spiel auf, es zu versuchen, und bietet stattdessen eines davon an.

  • Wiederholung Unterhalb der Wiederholungsgrenze. Das gleiche Profil wird erneut versucht.
  • last_known_good Es wird ein Profil angeboten, das in der Vergangenheit gestartet wurde. Es wird nichts deinstalliert.
  • safe_mode Für eine Sitzung werden keine Pakete geladen. Das Profil bleibt erhalten und kehrt zurück, wenn der Spieler es anfordert.

Wo es fehlgeschlagen ist, erfahren Sie, worauf Sie achten müssen:

Wo es gescheitert istWas ist das Ziel?
discoveryLesen Sie, was installiert ist. Ein Fehler hier ist normalerweise ein fehlerhaftes Paket.
provider_startBeginnen Sie mit dem, den die Komposition ausgewählt hat. Ein Fehler benennt hier eine Fähigkeit.
first_sceneDie erste Szene, die der Spieler sehen würde. Ein Fehler liegt hier im Inhalt, nicht in der Verkabelung.

Nichts davon deinstalliert Ihr Paket oder ändert Ihre Dateien. Der abgesicherte Modus ist eine Sitzung ohne geladene Pakete und Ihr Profil wartet auf Sie, wenn Sie es anfordern.

Eine totale Konvertierung

Es ist noch kein veröffentlichter Pfad für Ersteller. Der Build versteht das Manifest und bringt die Ashen Reach-Einrichtung mit; Ein verpackter und öffentlicher Workflow ist kein Thema. Behandeln Sie die Vorrichtung wie einen Ingenieurvertrag und nicht wie ein Versprechen, dass Sie ihn noch heute veröffentlichen können.

Es wird mit type: total_conversion deklariert. Als nächstes entscheidet fallback_policy, ob eine halbinstallierte Konvertierung den Spielinhalt anzeigt oder nichts.

ErsetztKann nicht hinzugefügt werden
Die Orte, die Menschen, der Krieg, die Mythen, die Karte, die Namen von allem. Deine Königreiche, deine Götter, deine eigene Wirtschaft.Eine neue Art von Sache. Ein Schwert, das stärker zuschlägt, ist eine Zahl; Eine Waffe, die einen Strahl abfeuert und die Strahlregeln benötigt, ist ein Feature, und Features sind Code.

Was ändert sich und was nicht

Fast nichts ändert sich. Der Ordner ist der Ordner, mod.json ist mod.json, die Familien sind die gleichen Familien mit den gleichen Feldern, die IDs haben den gleichen Namensraum, der Validator wendet die gleichen Regeln an und der Mod-Bildschirm meldet die gleichen Zustände. Bei jedem Tutorial auf dieser Seite handelt es sich um ein Tutorial zum Erstellen eines Teils einer Konvertierung. Der Abstand zwischen einem Paket, das einen Händler hinzufügt, und einem Paket, das ein ganzes Reich umfasst, ist ein Rekordwert, keine andere Fähigkeit.

Drei Dinge ändern sich wirklich, und es lohnt sich, alle drei zu kennen, bevor man beginnt:

WasAls
Das Plakattype: total_conversion und daneben fallback_policy, was vanilla oder none ist und den Wert vanilla hat, wenn Sie es nicht schreiben. vanilla bedeutet, dass eine halbinstallierte Konvertierung den Spielinhalt anzeigt, wo Ihrer fehlt; none bedeutet, dass nichts angezeigt wird.
BudgetsDas Vierfache des gewöhnlichen Profils – und ein Profil, keine Ausnahme. Die Worte des Builds selbst: «Viermal, nicht unbegrenzt: Ein Limit, das wegdeklariert werden kann, ist kein Limit.» Wenn total_conversion die Limits entfernen würde, würde es die Zeile werden, die jedes Paket schreibt, um sie zu umgehen.
Unübersetzte Wörter fallen nicht mehr auf diejenigen im Spiel zurückTypischerweise geht ein fehlender Schlüssel auf player_locale zurück, dann auf die Standardsprache Ihres Pakets, dann auf den Spielekatalog und schließlich auf den Schlüssel selbst. Bei einer vollständigen Konvertierung entfällt dieser dritte Schritt. Ein Schlüssel, den Sie nicht geschrieben haben, wird als Schlüssel angesehen und gemeldet.

Dieser dritte Schritt fühlt sich wie ein Verlust an und das Gegenteil ist der Fall. Old Seat, das in einer Welt entsteht, in der es keinen alten Sitz gibt, ist keine leicht falsche Übersetzung: Es ist das Grundspiel, das von unten durchscheint, was Sie darauf aufgebaut haben. Wenn man den Schritt wegnimmt, bedeutet das, dass die Lücke in den Worten etwas ist, worüber einem gesagt wird, und nicht etwas, das ein Spieler findet.

Wohin geht es?

Es lohnt sich, dies deutlich zu sagen, denn es verändert das, was es wert ist, gelernt zu werden.

Der Motor unter Bonemark wurde für mehr Leistung als Bonemark gebaut. Der Schauplatz sind Daten: Die Orte, die Menschen, die Wirtschaft, die Mythen und die Wörter für all dies sind Aufzeichnungen derselben Art, die auf dieser Seite beschrieben wurden. Aus diesem Grund ist der vollständige Konvertierungstyp im Manifest vorhanden, und aus diesem Grund bringt der Build eine zweite Einstellung als Fixpunkt und nicht als Test einer Codezeile mit sich.

Die langfristige Form lautet also nicht „ein Schwert hinzufügen“. Es ist so, dass jeder, der diese Familien lernt, lernt, eine Welt auf dieser Engine aufzubauen, und der Abstand zwischen einem Paket, das einen Händler hinzufügt, und einem Paket, das ein ganzes Reich darstellt, ist ein Rekordwert und keine andere Fähigkeit.

Steam Workshop ist die Richtung, um Packs an Spieler zu bringen, und deshalb beschreibt Sharing it die Bereiche eines Ladens, der immer noch nichts führt. Wenn Sie ein Paket abonnieren, anstatt es zu extrahieren, ändert sich die Art und Weise, wie es ankommt, und nichts daran, wie es geschrieben wird: derselbe Ordner, derselbe mod.json, die gleichen IDs.

Für beides gibt es kein Datum und auch keinen zweiten benannten Schauplatz: Einer existiert als technische Einrichtung, was nicht dasselbe ist wie ein angekündigter Schauplatz. Was hier gesagt wird, ist eine Richtung und was es kostet, bereit zu sein: Das heißt, dass das, was Sie heute lernen, nicht aufhört, das Ding zu sein, wenn die Tür geöffnet wird.

Besitze einen Mod

Die gleichen Bedingungen, auf die sich jede Modding-Szene eingestellt hat, weil sie diejenigen sind, die funktionieren. Hier gibt es nichts Ungewöhnliches und keine Spielereien.

Dein Mod gehört dirDie Platten, die du geschrieben hast, die Bilder, die du gezeichnet hast, der Ton, den du gemacht hast. Sie bleiben Ihr Eigentum. Durch das Posten eines Mods erhält niemand ein Recht auf deine Arbeit.
Der Inhalt des Spiels bleibt das SpielVerweisen Sie auf alles, was Sie wollen – überschreiben Sie eine ID, korrigieren Sie ein Feld, kleiden Sie ein Objekt. Nehmen Sie es nicht heraus, verpacken Sie es nicht neu und tragen Sie keine Kopien davon in Ihrer Tasche. Dies wird größtenteils für Sie reserviert: Ein Paket kann die Spieldateien nicht verdecken, daher ist es schwierig, diese Grenze versehentlich zu überschreiten.
Das Urheberrecht bewegt sich in keine RichtungEs ist der legale Name für die beiden Zeilen oben, und es lohnt sich, ihn klar auszudrücken, weil es die Sache ist, die die Leute umgekehrt für selbstverständlich halten. Durch die Veröffentlichung eines Pakets wird Ihre Arbeit nicht an das Studio abgegeben; Wenn Sie eines installieren, erhalten Sie das Spiel nicht. Das Urheberrecht an den von Ihnen geschriebenen Platten und der von Ihnen erstellten Kunst liegt bei Ihnen, und die Platten, die Kunst, der Ton und das Setting von Bonemark verbleiben beim Studio. Eine vollständige Konvertierung ist der Fall, der explizit erwähnt werden sollte: Durch das Ersetzen der Einstellung, die ein Spieler sieht, wird die ersetzte Einstellung nicht lizenziert, und ein Paket kann die Spieldateien immer noch nicht enthalten.
Mods sind kostenlosKeine Verkäufe, keine Pay Walls, kein früher Zugang gegen Gebühr, in keinem Geschäft oder auf jeder Plattform. Und sie dürfen nicht einmal von uns verkauft werden: Die gleiche Regel gilt für das Studio.
Spenden sind in OrdnungEin Trinkgeldglas, ein Patreon, eine Dankesseite. Es ist die Unterstützung einer Person, kein Preis für einen Mod, und jede gesunde Szene erlaubt es.
Für die Arbeit einer anderen Person ist deren Erlaubnis erforderlichEin Charakter, ein Sound, ein Sprite, eine Reihe von Datensätzen aus einem anderen Paket: Fragen Sie nach und geben Sie den Autor an, wo ein Spieler es lesen kann.
Übersetzungen sind standardmäßig zulässigJeder kann Ihr Paket übersetzen und die Übersetzung unter Berufung auf Sie veröffentlichen. Sagen Sie es auf Ihrer Seite, wenn Sie lieber zuerst gefragt werden möchten.
Wiederverwendung fragt zuerstAuf dem Paket einer anderen Person aufbauen, ein verlassenes weiterführen, ihre Unterlagen nehmen und sie in Ihre legen: Fragen Sie sie. Schweigen ist kein Ja.

Weil kostenlos nicht verhandelbar ist. Bezahlte Mods wurden in großem Umfang ausprobiert und jedes Mal eingestellt: Sobald es um Geld geht, geht es darum, wem welche Idee gehört und nicht darum, was als nächstes gebaut werden soll, und die gemeinsame Szene fängt an, sich zu behaupten. In diesem Ökosystem sind alle auf dem gleichen Niveau, und dazu gehören auch diejenigen, die das Spiel entwickelt haben.

Eines können wir verlangen. Dass ein Paket entfernt wird, und zwar nur aus bestimmten Gründen: Es enthält Spieldateien, gibt sich als jemand anderes aus oder enthält dort, wo es gehostet wird, illegales Material. Nicht, weil wir nicht mit ihm einverstanden sind.

Beschlossen vom Studio am 14.08.2026. Der Text hier ist Politik; Ein Anwalt wird es lesen, bevor das Modding öffentlich wird, und wenn sich dadurch ein Wort ändert, ändert sich diese Seite mit Ihnen.

Wo kann man fragen?

Discord, und es ist noch nicht geöffnet. Dort werden Modding-Fragen beantwortet, und die Einladung steht nirgendwo, weil es nichts gibt, wozu man jemanden einladen könnte. Aus dem gleichen Grund ist das Discord-Branding auf der Titelseite langweilig. Der Tag, an dem es aufleuchtet, ist der Tag, an dem diese Zeile die Adresse trägt.

„Discord“ zu sagen, bevor die Adresse existiert, ist mehr wert, als nichts zu sagen: Es sagt Ihnen, wo Sie suchen müssen, und weist Sie darauf hin, nicht in einem Forum auf die Jagd zu gehen, das noch nie geöffnet wurde.

Mittlerweile beantwortet fast jede Frage, ohne dass sich jemand anderes einmischt, Bevor Sie jemanden um Hilfe bitten: Der Preflight-Block benennt den Build, die Pakete, den Status und den Grund für jede Ablehnung, und fast alles, was eine Person antworten würde, ist bereits enthalten.

Überarbeitet im Vergleich zum Build: 2026-08-16. Jedes Etikett weist auf einen Zustand hin, nicht auf ein Versprechen.Etiketten lesen →