🇬🇧 English · 🇩🇪 Deutsch
Mod-Format: eine mod.json von Hand schreiben
Diese Seite beschreibt die mod.json, die WolfSDK Loader und WolfSDK Studio 0.2.0 lesen, Feld für Feld, so wie modloader/wolfsdk/mod.py sie prüft. Die Beispiele sind echte Dateien aus den Mods der 0.2.0-Pakete. Wer eine Mod ohne JSON bauen will, nimmt das WolfSDK Studio. Welche Decls und Pfade es gibt: Modding Guide (Englisch).
Keywords: Mod-Format, mod.json, Manifest, Dateiformat einer Mod, Mod von Hand schreiben, mod format, write a mod by hand
Wie schreibe ich eine Mod von Hand?
- Leg im Ordner
modsnebenWolfSDK.cmdeinen Ordner an, z. B.mods\meine_mod(Open folder auf der Seite Mods öffnet ihn). - Leg eine
mod.jsonhinein (Felder unten). Dateien, auf die sie zeigt, kommen in denselben Ordner, z. B.mods\meine_mod\decls\x.decl. - Auf der Seite Mods auf Reload klicken, die Mod anhaken, dann Check (oder Check mod set auf der Seite Overview).
- Apply mods, Start game.
Ein Gerüst über die Kommandozeile, im entpackten Ordner:
python\python.exe -m wolfsdk new-mod meine.mod --name "Meine Mod"
Das schreibt mods\meine_mod\mod.json mit einem Beispiel-set. Der Loader liest jeden Ordner in mods mit einer mod.json; eine kaputte wird mit ! unter Checks & messages aufgeführt.
Keywords: wie schreibe ich eine Mod, Mod schreiben, Mod erstellen, neue Mod, eigene Mod, Mod-Ordner, new-mod, write a mod
Alle Felder der mod.json im Überblick
| Feld | Pflicht | Standard | Bedeutung |
|---|---|---|---|
id |
ja | – | eindeutige ID, z. B. example.big_magazine |
name |
ja | – | Name auf der Seite Mods |
version |
nein | "0.0.0" |
auf der Seite Mods angezeigt |
author |
nein | "" |
wer sie gemacht hat |
description |
nein | "" |
was sie tut und was getestet ist |
priority |
nein | 100 |
ganze Zahl; niedrig zuerst, höher gewinnt |
spiel |
nein | "tno" |
das Spiel: "tno" oder "tnc" |
assets |
nein | {} |
Änderungen, Schlüssel typ:name, mit set/file |
cvars |
nein | {} |
Cvars, die beim Spielstart gesendet werden |
Andere Schlüssel werden ignoriert. Das Studio schreibt "studio": {"version": 1} in die Mods, die es erstellt.
Keywords: Felder der mod.json, alle Felder, Schlüssel, Aufbau, Referenz, mod.json fields, keys
mod.json-Felder id und name
id und name sind die einzigen Pflichtfelder; beide müssen nicht-leerer Text sein.
idkennzeichnet die Mod. Der Loader merkt sich angehakte Mods über ihreid, also halte sie zwischen Versionen stabil. Zwei Mods mit derselbenid: Die zweite wird mit „Duplicate mod id“ übersprungen. Die mitgelieferten Mods nutzen IDs mit Punkt wieexample.big_magazine,wolfsdk.tnc_photo_modeoderstudio.sandbox_tools.nameist das, was die Seite Mods anzeigt.
version, author und description sind optionaler Text. Die Seite Mods zeigt Name, Version, Priorität und die Zahl der Assets.
Keywords: id, name, Mod-ID, Mod-Name, Pflichtfelder, Duplicate mod id, version, author, description, required fields
mod.json-Feld spiel: für welches Spiel eine Mod ist
spiel ist "tno" (The New Order) oder "tnc" (The New Colossus). Ohne das Feld ist eine Mod eine The New Order-Mod. Jeder andere Wert ist ein Fehler („'spiel' must be 'tno' or 'tnc'“).
Die beiden Spiele teilen weder Asset-Namen noch Archivformat. Der Loader zeigt und wendet nur die Mods des Spiels an, das oben rechts gewählt ist.
Achtung: Die Apps lesen spiel, nicht game. Eine mod.json mit nur "game": "tnc" gilt als The New Order-Mod und erscheint bei The New Colossus nicht. Die SDK-Pakete nutzen game (siehe Vergleich unten).
Keywords: spiel, game, tno, tnc, welches Spiel, New Order, New Colossus, Mod erscheint nicht, Mod wird nicht angezeigt, which game
mod.json-Feld priority: Reihenfolge und Konflikte
priority ist eine ganze Zahl, Standard 100. Mods werden nach priority, dann id angewendet, die niedrigste zuerst. Jede Mod arbeitet auf dem Ergebnis der vorherigen.
- Zwei Mods ändern verschiedene Werte derselben Decl: Beide wirken.
- Zwei Mods setzen mit
setdenselben Wert: Die höhereprioritygewinnt, ein Konflikt wird gemeldet. - Zwei Mods ersetzen dasselbe Asset mit
file: Die höhereprioritygewinnt, als Konflikt gemeldet. - Zwei Mods schreiben dieselbe Textur (Asset
imageodertexdb): abgelehnt, bevor etwas geschrieben wird („They can't be used together - please tick only one of them“).
Konflikte blockieren das Anwenden nicht; sie stehen unter Checks & messages.
Keywords: priority, Priorität, Reihenfolge, Ladereihenfolge, Konflikt, zwei Mods, überschreiben, höchste gewinnt, load order, conflict
mod.json-Feld assets: welche Spiel-Assets eine Mod ändert
assets ist ein Objekt. Jeder Schlüssel benennt ein Asset als typ:name, getrennt am ersten Doppelpunkt, z. B. weapon:weapon/handgun_base, material:models/weapons/handgun/handgun_hg oder cfile:snapdemo.cfg. Jeder Wert ist ein Objekt mit set, file oder beidem.
Regeln, die der Loader prüft:
- Ein Schlüssel ohne Doppelpunkt ist ein Fehler („asset key must look like 'type:name'“).
- Ein Eintrag ohne
setund ohnefileist ein Fehler. - Das Asset muss im gewählten Spiel existieren („asset does not exist in the game“).
- Retail-Namen sind klein geschrieben. Schreib ein Asset überall gleich; zwei Schreibweisen werden abgelehnt („the same asset is spelled differently“).
"assets": {} ist erlaubt, für eine Mod, die nur Cvars setzt.
Keywords: assets, Asset-Schlüssel, typ:name, Asset-Name, Asset-ID, asset key
Asset-Änderung set: einzelne Werte einer Decl ändern
set ordnet Pfaden mit Punkten in einer Decl neue Werte zu. Nur diese Werte ändern sich; Kommentare, Einrückung und alles andere bleiben.
"damage:damage/tungsten/mg60": {
"set": {
"edit.damageParms.minDamage": 22.0,
"edit.damageParms.maxDamage": 30.0
}
}
- Ein Pfad muss in der Decl schon existieren, sonst „unknown path(s)“.
setkann keine neuen Felder anlegen; dafürfilenehmen. true/falsewerden alstrue/falsegeschrieben. Zahlen werden so geschrieben, wie sie angegeben sind:30.0bleibt30.0,30bleibt30.- Text bekommt Anführungszeichen, wenn der Originalwert welche hatte. Blockwerte wie
virtualmappingbrauchen ihre Klammern:"{ 0.015625, 0.015625, 0.000000, 0.062500 }". - Eine als Text angegebene Zahl (
"0.00") wird genau so geschrieben.
Keywords: set, Pfad, Wert ändern, Decl-Pfad, Zahlenformat, edit value
Asset-Änderung file: ein ganzes Asset ersetzen
file ist ein Pfad relativ zum Mod-Ordner. Seine Bytes ersetzen das Asset vollständig. Aus der mitgelieferten Mod cheats_gamemode:
"gamemodesp:gamemode/campaign": { "file": "assets/gamemodesp__gamemode_campaign.decl" }
- Der Pfad muss im Mod-Ordner bleiben („points outside the mod folder“), und die Datei muss existieren („file is missing“).
- Mit
setundfileauf einem Asset kommt zuerstfile, dannsetdarauf. - Die Bytes werden geschrieben, wie sie sind. The New Colossus-
cfile-Einträge (verschlüsselte Configs wiesnapdemo.cfg) müssen für ihren Namen verschlüsselt sein: Lass sie von der Text-Ersetzung des Studios speichern. Reiner Text funktioniert dort nicht. - Lieber
set: Einefile-Mod kollidiert mit jeder anderen Mod auf diesem Asset.
Keywords: file, Datei ersetzen, ganze Datei, Asset ersetzen, cfile, verschlüsselt, replace asset
mod.json-Feld cvars: Einstellungen beim Spielstart
cvars ordnet Cvar-Namen je einen Wert zu (Text, Zahl oder true/false; Listen und Objekte werden abgelehnt). Sie werden bei jedem Spielstart mit Start game oder Spielen.cmd gesendet und gewinnen gegen dieselbe Cvar auf Cheats & QoL.
- The New Order: Startargumente; Cheat-Cvars zusätzlich als
+toggle, damit der Cheat-Reset beim Start sie nicht löscht. - The New Colossus: Cvars, die die Retail-Konsole annimmt, gehen als Startargumente, der Rest in die
default.cfgdes Spiels; Revert entfernt sie. Namen, die keine The New Colossus-Cvars sind, werden übersprungen. Ersetzt eine andere angehakte Modcfile:default.cfg, bleiben diese Cvars weg, mit Meldung.
Schreib Werte als Text ("1"): Der Loader macht aus jedem Wert Text, und aus true würde True.
Keywords: cvars, Cvar, Konsolenvariablen, Einstellungen, Startparameter, default.cfg, +toggle, settings
Beispiel: die kleinste Mod (Big Pistol Magazine)
Die mitgelieferte Mod example_big_magazine für The New Order, vollständig:
{
"id": "example.big_magazine",
"name": "Big Pistol Magazine (Example)",
"version": "1.0.0",
"author": "wolfsdk",
"description": "Raises the pistol magazine from 20 to 66. ...",
"priority": 100,
"assets": {
"weapon:weapon/handgun_base": {
"set": { "edit.validAmmoClips.item[0].clipSize": 66 }
}
}
}
Kein spiel, also eine The New Order-Mod. Ein set auf einen Pfad; der Rest der Waffen-Decl bleibt unberührt.
Keywords: Beispiel, mod.json Beispiel, Vorlage, Beispiel-Mod, kleinste Mod, großes Magazin, clipSize, example, template
Beispiel: eine Werte-Mod für The New Colossus (Invulnerable)
Aus der mitgelieferten Mod tnc_erste (2 ihrer 7 Assets gezeigt):
{
"id": "wolfsdk.tnc_erste",
"name": "Invulnerable (TNC)",
"version": "1.0.0",
"priority": 100,
"spiel": "tnc",
"assets": {
"table:playerdamage/normal": { "set": { "min": "0.0", "max": "0.0" } },
"table:playerdamage/hard": { "set": { "min": "0.00", "max": "0.00" } }
}
}
"spiel": "tnc" macht sie zu einer The New Colossus-Mod. Die Werte sind Text, damit jeder genau die Länge des Originalwerts behält.
Keywords: Beispiel, The New Colossus Mod, TNC-Mod, spiel tnc, unverwundbar, playerdamage, table, example, TNC mod
Beispiel: eine Mod nur mit Cvars (Hidden Menu Options)
Die mitgelieferte Mod tnc_hidden_options ändert gar kein Asset (Beschreibung gekürzt):
{
"id": "wolfsdk.tnc_hidden_options",
"name": "Hidden Menu Options",
"version": "1.0.0",
"author": "wolfsdk",
"description": "Turns on menu options the retail game hides: ...",
"priority": 100,
"spiel": "tnc",
"cvars": {
"menu_showOptionForDevMenu": "1",
"menu_showOptionForSASMenu": "1",
"menu_allowMeinLeben": "1",
"g_setting_photomode": "1"
},
"assets": {}
}
Die Konsole lehnt diese Entwickler-Cvars ab, also schreibt der Loader sie in default.cfg. Im Spiel noch nicht bestätigt.
Keywords: Beispiel, nur Cvars, Cvar-Mod, Menüoptionen, Hidden Menu Options, default.cfg, example, cvars only
Beispiel: eine Mod, die ganze Dateien ersetzt (Photo Mode)
Die mitgelieferte Mod tnc_photo_mode (Beschreibung gekürzt):
{
"id": "wolfsdk.tnc_photo_mode",
"name": "Photo Mode",
"version": "1.0.0",
"author": "wolfsdk",
"description": "One key freezes the game for screenshots: ...",
"priority": 100,
"spiel": "tnc",
"assets": {
"cfile:default_snap.cfg": { "file": "assets/default_snap_cfg.bin" }
}
}
assets/default_snap_cfg.bin ist die verschlüsselte Form der unbenutzten SnapMap-Config default_snap.cfg. Im Spiel: bind F8 "resourceExec default_snap.cfg -s". Im Spiel noch nicht bestätigt.
Keywords: Beispiel, Datei ersetzen, cfile, Photo Mode, Fotomodus, resourceExec, bin-Datei, example, file replacement
Wie finde ich Asset-Namen und änderbare Pfade?
Mit der Kommandozeile im entpackten Ordner (für The New Colossus --title tnc dazu):
python\python.exe -m wolfsdk --title tnc list --type weapon --grep pistol
python\python.exe -m wolfsdk --title tnc cat weapon:<name>
python\python.exe -m wolfsdk --title tnc paths weapon:<name>
list zeigt Asset-Namen, cat gibt ein Asset aus, paths listet die Pfade, die set ändern kann, mit ihren aktuellen Werten. types listet die Asset-Typen. Im WolfSDK Studio kannst du Texturen und Texte durchsuchen und direkt ersetzen. Pfade für Waffen, Skins und Gegner mit Beispielen: Modding Guide (Englisch).
Keywords: Asset finden, Asset-Namen, Pfade finden, list, cat, paths, types, Kommandozeile, CLI, Decl-Pfade, find asset, command line
Wie prüfe ich eine Mod vor dem Anwenden?
- Im Loader: Check auf der Seite Mods oder Check mod set auf der Seite Overview.
- Auf der Kommandozeile:
python\python.exe -m wolfsdk check
Die Prüfung baut jede Änderung im Speicher und prüft Asset-Namen, Decl-Pfade, Konflikte und die geplanten Schreibvorgänge. Sie schreibt nichts. Ergebnisse und Fehler erscheinen unter Checks & messages.
Anwenden beginnt jedes Mal bei den Originaldateien und schreibt den ganzen angehakten Satz, deshalb lässt ein fehlgeschlagenes Anwenden das Spiel im Original: Schlägt es fehl, werden die vorher angewendeten Mods zurückgesetzt, und der Loader sagt das.
Keywords: Mod prüfen, mod.json prüfen, testen, Probelauf, Check, Check mod set, wolfsdk check, check mod, validate mod.json, dry run
mod.json-Fehler beim Einlesen einer Mod
Diese erscheinen nach Reload mit ! unter Checks & messages; die Mod wird nicht aufgeführt:
invalid JSON (...): Ein Komma, Anführungszeichen oder eine Klammer stimmt nicht.field 'id' is missing/field 'name' is missingodermust be a non-empty string.'spiel' must be 'tno' or 'tnc'.'priority' must be a whole number.'assets' must be an object,asset key must look like 'type:name',... has neither 'file' nor 'set',... .set must be an object.... .file points outside the mod folder.'cvars' must be an object,cvar '...' needs a single value (text, number or true/false).Duplicate mod id.
Keywords: Fehler in mod.json, Fehlermeldung, invalid JSON, Feld fehlt, kaputte Mod, Mod lädt nicht, mod.json error, error message
mod.json-Fehler beim Prüfen oder Anwenden
Diese kommen von Check, Check mod set oder Apply mods:
asset does not exist in the game (...): falscher Name, oder die Mod ist für das andere Spiel (spiel).unknown path(s): ...: Derset-Pfad steht nicht in dieser Decl. Vielleicht steht er in der Eltern-Decl (inherit);pathszeigt, was existiert.file is missing: ...: Diefile-Datei liegt nicht im Mod-Ordner.... change the same textures ... please tick only one of them: zwei Textur-Mods für dasselbe Asset.the same asset is spelled differently: Schreib den Asset-Schlüssel in jeder Mod gleich.Not enough disk space: Platz auf dem Laufwerk des Spiels freimachen und erneut anwenden.
Keywords: Fehler beim Anwenden, Fehler beim Prüfen, asset does not exist, unknown path, file is missing, gleiche Texturen, Speicherplatz, apply error
mod.json der Apps im Vergleich zum SDK-Schema
Die SDK-Pakete (pip, npm, cargo, go) nutzen eine andere mod.json, festgelegt in spec/mod.schema.json im Repository:
| Apps (Loader, Studio) | SDK-Schema | |
|---|---|---|
| Spiel | nur spiel |
game; spiel als alter Alias |
id |
Pflicht | nicht im Schema |
name |
Pflicht | optional (Ordnername) |
Standard-priority |
100 |
0 |
| gleiche Priorität | nach id sortiert |
Eingabereihenfolge |
| Asset-Einträge auf oberster Ebene | ignoriert | angenommen, wenn assets fehlt |
cvars, author |
gelesen | nicht im Schema |
Schlüssel außer set/file in einem Asset |
ignoriert | nicht erlaubt |
Beide wenden zuerst file an, dann set darauf. Das SDK und seine eigene Kommandozeile wolfsdk -g: Modding Guide, Teil für Programmierer (Englisch).
Keywords: SDK-Schema, mod.schema.json, game oder spiel, Unterschied, SDK mod.json, Kompatibilität, SDK schema
Eine mod.json, die in den Apps und im SDK funktioniert
Schreib sie so, dass beide sie gleich lesen:
idundname(die Apps brauchen beide; das SDK nimmt zusätzliche Schlüssel an).spielfür das Spiel; das SDK liest es als alten Namen vongame. Schreibst du auchgame, gib ihm denselben Wert.priorityausschreiben, weil die Standardwerte verschieden sind (100gegen0).- Alles unter
assets, jeder Eintrag nur mitsetund/oderfile. cvarswirken nur in den Apps.
Keywords: kompatible mod.json, beide Formate, SDK und Loader, portable Mod, game und spiel, kompatibel, compatible mod.json
Welche Teile des Mod-Formats sind im Spiel bestätigt?
- Mods anwenden und zurücksetzen mit Backups: Im Spiel bestätigt.
setauf einer The New Colossus-Decl: Im Spiel bestätigt (das 30-Schuss-Magazin der Explosive Pistol).fileauf einer The New Colossus-cfile: Im Spiel bestätigt (Sandbox Tools: Gottmodus und unendlich Munition).cvarsin The New Colossus überdefault.cfgund in The New Order über Startargumente und+toggle: Im Spiel noch nicht bestätigt.- The New Order: Gepatchte Archive laden ohne Fehler (gemessen, Modding Limits §4); was die meisten einzelnen Wertänderungen im Spiel bewirken, ist Im Spiel noch nicht bestätigt.
Keywords: im Spiel bestätigt, getestet, Status, funktioniert set, funktioniert file, funktionieren cvars, confirmed in game, tested