Modding-Referenz

Füge Fahrzeuge hinzu, ändere Gelände und Tarife, übersetze das Spiel oder schreibe eigene Spielregeln.

Modding-API durchsuchenSchlage Hooks, Methoden und Dateioptionen nach.

Mod-Dateien und IDs

Jeder Mod ist ein Ordner mit einer mod.json. Füge nur die weiteren Dateien hinzu, die dein Mod verwendet.

my_mod/
  mod.json
  data.json
  lang/*.lang.txt
  maps/
  models/*.glb
  main.gd

Hier ist eine vollständige mod.json. Nur id ist Pflicht. Wähle eine eindeutige ID und behalte sie bei Updates bei. Spielstände erkennen den Mod an dieser ID.

{
  "id": "north_line_mail",
  "name": "North Line Mail",
  "version": "1.0",
  "author": "Your name",
  "description": "A diesel for overnight mail trains."
}

Öffne im Hauptmenü Mods und wähle Mod-Ordner öffnen. Lege den Ordner oder die ZIP-Datei dort ab, klicke auf Neu suchen und aktiviere den Mod. Arbeite beim Bearbeiten mit dem entpackten Ordner, damit du speichern und erneut suchen kannst. Änderungen gelten für das nächste Spiel, das du startest oder lädst.

Fahrzeuge

Trage jedes Fahrzeug in data.json unter vehicles mit einer eindeutigen Fahrzeug-ID ein. north_line_mail_diesel fügt zum Beispiel eine Lok hinzu, die wie die Diesellok des Grundspiels aussieht.

{
  "vehicles": {
    "north_line_mail_diesel": {
      "name": "North Line Mail Diesel",
      "kind": "rail",
      "look": "diesel",
      "cargos": ["mail", "pax"],
      "max_wagons": 6,
      "speed": 6.2,
      "cost": 88000,
      "run": 7600,
      "year": 1962,
      "desc": "A fast diesel for overnight mail."
    }
  }
}
FeldWert
name, descAnzeigename und optionale Shopbeschreibung.
kindrail, road, water oder air.
look oder modelVerwende ein vorhandenes Modell desselben Typs oder gib den Pfad zu deinem eigenen Modell an. Beispiele aus dem Grundspiel sind steam, diesel, bus, truck, ferry, freighter, prop und jet.
cargosListe mit mindestens einer vorhandenen Fracht-ID, etwa pax, mail, coal, wood, goods und food.
max_wagons oder capFür Loks ist max_wagons Pflicht. Bei anderen Fahrzeugen gibt cap die Kapazität an.
speedFelder pro Spieltag. Mit 30 multipliziert ergibt das die Geschwindigkeit in km/h, die im Shop steht.
cost, runKaufpreis und jährliche Betriebskosten in ganzen Dollar. Wagen erhöhen den Preis des Zuges.
yearErstes Verkaufsjahr. Lass das Feld weg, wenn das Fahrzeug von Anfang an verfügbar sein soll.
relOptionale Anfangszuverlässigkeit zwischen 0 und 1. Der Standardwert hängt vom Jahr des Fahrzeugs ab.
electricSetze den Wert für Loks mit Oberleitungsbedarf auf true.

Mods fügen neue Fahrzeug-IDs hinzu. Meldet Fourways eine doppelte ID, wähle eine, die nur dein Mod verwendet.

Eigene 3D-Modelle

Exportiere dein Modell als binäres glTF (.glb) und lege es in models/ ab. Verwende in der Fahrzeugdefinition "model": "models/mail.glb" anstelle von look. Gib unter length die Fahrzeuglänge in Feldern an.

  • Modelliere mit einer Einheit pro Feld. Ein Bus ist etwa 0,46 Einheiten lang, ein Schiff etwa 0,9.
  • Zentriere das Modell am Ursprung, setze seine Unterseite auf Y = 0 und richte es nach −Z aus.
  • Eigene Modelle behalten ihre exportierten Materialien. Modelle, die du mit look übernimmst, nutzen die Firmenfarben.
  • Das Modell einer Lokomotive umfasst nur die Lok. Fourways stellt die Wagen bereit.

Frachttarife und Namen

Füge die gewünschten Abschnitte in data.json neben den Fahrzeugdefinitionen ein oder verwende sie einzeln.

{
  "cargo": {
    "mail": {"rate": 52, "days": 10}
  },
  "town_names": {
    "prefixes": ["Vila", "Sant", "Mont"],
    "suffixes": ["nova", "bella", "serrat"],
    "replace": false
  },
  "company_names": ["Ferrocarrils del Nord", "Costa Brava Lines"]
}
  • Verwende in cargo vorhandene Fracht-IDs. rate ist der Tarif für eine Einheit über 25 Felder. days gibt an, wie viele Tage der volle Tarif gilt. Beide Werte müssen positiv sein. Drücke Y, um das Ergebnis unter Frachttarife zu sehen.
  • town_names kombiniert eine Vorsilbe und eine Nachsilbe zu Ortsnamen. Ersetze mit replace: true die Namenslisten des Grundspiels durch deine eigenen.
  • company_names liefert Namen für Konkurrenzfirmen. Das Spiel verwendet diese Namen zuerst und greift danach auf seine eigene Liste zurück.

Höhenkarten und Voreinstellungen

Lege eine PNG- oder JPEG-Datei in Graustufen in maps/ ab. Schwarz markiert das tiefste Gelände, meist das Meer, und Weiß das höchste. Fourways passt das Bild an die Weltgröße an und führt es unter Karte in Neues Spiel auf.

Lege zu great_valley.png eine Datei namens great_valley.json an, um Name, Beschreibung und Startoptionen festzulegen.

{
  "name": "Great Valley",
  "description": "A wide valley between two ranges.",
  "settings": {"w": 512, "h": 256, "towns": 1, "industries": 2, "year": 1970}
}
  • Breite und Höhe können jeweils 64, 128, 256, 512 oder 1024 Felder betragen.
  • Die Dichte von Orten und Industrien reicht von 0 (wenige) bis 3 (sehr dicht).
  • Mögliche Startjahre sind 1950, 1960, 1970, 1980, 1990 und 2000. Spieler können die Voreinstellungen vor dem Start ändern.

Übersetzungen und neue Sprachen

Lege Textdateien mit der Endung .lang.txt in lang/ ab. Beginne jeden Block mit > und dem genauen englischen Wortlaut. Füge pro Sprachcode eine Zeile hinzu. Das funktioniert für Texte des Grundspiels und für Namen und Beschreibungen deiner Mod-Fahrzeuge.

> Cost %s
es: Coste %s
ca: Cost %s
fr: Coût %s
  • Lass Platzhalter wie %s und %d in derselben Reihenfolge. Verwende \n für Zeilenumbrüche und doppelte Anführungszeichen für Texte mit Leerzeichen am Anfang oder Ende.
  • Für eine neue Sprache hinterlegst du Übersetzungen unter ihrem Sprachcode. Übersetze auch den Schlüssel English, damit die Sprache unter ihrem eigenen Namen in den Einstellungen erscheint. Schreibe etwa nl: Nederlands unter > English.
  • Schließe Texte in Skripten in L.t("English text") ein, damit Spieler sie mit denselben Dateien übersetzen können.

Spielskripte

Lege main.gd im Mod-Ordner an und beginne mit extends Mod. Überschreibe die benötigten Funktionen. Dieses Beispiel zahlt dem Spieler jeden Monat 500 $ Zuschuss und veröffentlicht eine Meldung.

extends Mod

func _on_month(sim: Sim) -> void:
    sim.company.earn(500)
    news(sim, L.t("Monthly transport grant"), "good")
FunktionWann Fourways sie aufruft
_on_load()Beim Anwenden der aktiven Mods, auch wenn du im Mod-Menü erneut suchst. Zu diesem Zeitpunkt läuft kein Spiel.
_on_new_game(sim)
_on_game_loaded(sim)
Wenn eine Welt erstellt oder ein Spielstand vollständig geladen wurde.
_on_day(sim)
_on_month(sim)
_on_year(sim, year)
Jeden Tag, zum Monatsende und beim Jahreswechsel. year ist das gerade abgelaufene Jahr.
_on_delivery(sim, vehicle, station, amount)Nachdem ein Fahrzeug entladen und der Transport bezahlt wurde.
_on_vehicle_bought(sim, vehicle)
_on_station_built(sim, station)
Nach einem Kauf oder nachdem eine Station gebaut oder erweitert wurde.
_on_news(sim, item) → boolVor dem Veröffentlichen einer Meldung. Das Dictionary enthält text, kind, pos und day. Gib false zurück, um sie auszublenden, oder true, um sie zuzulassen.
_save(sim) → Dictionary
_load(sim, data)
Gib aus _save ein Dictionary mit einfachen Daten zurück. Enthält der Spielstand Daten für diesen Mod, übergibt Fourways sie vor _on_game_loaded an _load.

Das Objekt sim bietet Zugriff auf Firmen, Fahrzeuge, Orte, Industrien und Stationen. Nutze sim.rng für reproduzierbare Zufallsereignisse und Methoden wie sim.build_station() oder sim.buy_vehicle() für Spieleraktionen. Die Klasse Mod bietet news() für Meldungen, note() für Logeinträge und path() zum Auffinden von Dateien im Mod-Ordner.

Hilfsfunktionen für Mods

  • news(sim, text, kind = "info", at = Vector2(-1, -1)) veröffentlicht eine Meldung. Verwende good, info, warn oder bad für kind. Gib in at ein Feld an, zu dem ein Klick auf die Meldung springt.
  • note(text) schreibt einen Logeintrag mit der Mod-ID. Du kannst die Funktion aus _on_load() aufrufen.
  • path(file) gibt den Pfad zu einer Datei im Mod-Ordner zurück. Über info kannst du Metadaten wie id, name und version abfragen.

Häufige Simulationsaktionen

Du kannst diese Methoden aus einer Funktion aufrufen, die sim erhält. Ohne who wird die Firma des Spielers verwendet. Prüfe bei einem zurückgegebenen Dictionary zuerst ok. Bei einem Fehlschlag steht der Grund in reason.

  • sim.build_line(kind, pts, who = null) baut eine Straße (road) oder ein Gleis (rail) über aufeinanderfolgende benachbarte Felder. Übergib ein typisiertes Array[Vector2i].
  • sim.build_station(kind, pts, axis, who = null) baut oder erweitert eine Station vom Typ road, rail, dock oder air. Übergib die Felder als Array[Vector2i] und bei Straße oder Schiene die Ausrichtung des Bahnsteigs. Bei Erfolg enthält das Ergebnis station.
  • sim.buy_vehicle(model_id, cargo, wagons, stops, full_load_first, who = null, consist = [], transfer_at = []) kauft ein Fahrzeug mit einer vorhandenen Modell-ID und einer Liste von Stationen. consist kann bei gemischten Zügen Fracht und Wagenzahl überschreiben. transfer_at enthält die Indizes der Halte, an denen Fracht für ein anderes Fahrzeug zurückgelassen wird. Bei Erfolg enthält das Ergebnis vehicle.
  • sim.town_action(town, action, who = null) führt advertise, trees oder fund aus und gibt die Kosten der Aktion in cost zurück.
  • sim.company.earn(amount) schreibt der Firma des Spielers Geld gut. sim.company.spend(cost, category) bucht eine Ausgabe und gibt false zurück, wenn das Geld nicht reicht. Kategorien sind zum Beispiel construction und vehicles.
  • town.rating(company_id) liest die Bewertung durch den Gemeinderat. town.change_rating(company_id, delta, why = "", day = -1) passt sie im Bereich von 0 bis 100 an. Übergib einen Grund und sim.day_int, um die Änderung im Ortsfenster zu protokollieren.

Hier sind alle von Mod definierten Funktionen aufgeführt. Skripte können weitere Methoden des Spiels und von Godot aufrufen. Diese findest du im Quellcode des Spiels und der Engine.

Skript-Mods laufen mit den Berechtigungen des Spiels. Aktiviere nur Skripte von vertrauenswürdigen Autoren.

Spielstände und Weitergabe

Packe den Mod-Ordner zum Weitergeben als ZIP-Datei. Fourways akzeptiert auch ZIP-Dateien mit mod.json auf der obersten Ebene. Behalte die Mod-ID und die Fahrzeug-IDs über mehrere Versionen hinweg bei, damit vorhandene Spielstände sie wiederfinden.

Ein Spielstand merkt sich aktive Mods und kann Skriptdaten speichern. Fehlt beim Laden ein Mod oder ist er ausgeschaltet, warnt Fourways und lässt Fahrzeuge mit fehlenden Modellen weg. Aktiviere die ursprünglichen Mods wieder, bevor du einen davon abhängigen Spielstand lädst.

Die eingebauten Formate decken die hier beschriebenen Inhalte ab. Neue Frachtarten, Industrien oder Stadtgebäude, einzelne Baukosten, der Austausch von Modellen oder Sounds des Grundspiels und Änderungen an der Oberfläche erfordern Arbeit am Spielcode.