Référence des mods

Ajoute des véhicules, modifie le relief et les tarifs, traduis le jeu ou écris tes propres règles.

Rechercher dans l’API des modsConsulte les fonctions d’événement, les méthodes et les options des fichiers.

Fichiers et identifiants du mod

Chaque mod est un dossier contenant mod.json. Ajoute uniquement les autres fichiers dont ton mod a besoin.

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

Voici un mod.json complet. Seul id est obligatoire. Choisis un identifiant unique et garde-le lors des mises à jour, car les sauvegardes l’utilisent pour reconnaître le mod.

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

Ouvre Mods sur l’écran titre et choisis Ouvrir le dossier des mods. Place le dossier ou le ZIP à cet endroit, clique sur Rechercher à nouveau et coche le mod. Pendant les modifications, travaille dans le dossier décompressé pour pouvoir enregistrer et relancer la recherche. Les changements s’appliquent à la prochaine partie lancée ou chargée.

Véhicules

Dans data.json, ajoute chaque véhicule sous vehicles avec un identifiant unique. Par exemple, north_line_mail_diesel ajoute une locomotive qui reprend l’apparence du diesel du jeu de base.

{
  "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."
    }
  }
}
ChampValeur
name, descNom affiché et description facultative dans la boutique.
kindrail, road, water ou air.
look ou modelRéutilise un modèle du même type ou indique le chemin vers ton propre modèle. Exemples d’identifiants du jeu de base : steam, diesel, bus, truck, ferry, freighter, prop et jet.
cargosListe contenant au moins un identifiant de cargaison existante. Par exemple, pax, mail, coal, wood, goods et food.
max_wagons ou capLe champ max_wagons est obligatoire pour les locomotives. Pour les autres véhicules, cap indique la capacité.
speedCases par jour de jeu. Multiplie par 30 pour obtenir la vitesse en km/h affichée dans la boutique.
cost, runPrix d’achat et coût annuel d’exploitation, en dollars entiers. Les wagons s’ajoutent au prix du train.
yearPremière année de disponibilité en boutique. Omet ce champ pour rendre le véhicule disponible dès le début.
relFiabilité initiale facultative, entre 0 et 1. La valeur par défaut dépend de l’année du véhicule.
electricIndique true si la locomotive a besoin d’une caténaire.

Les mods ajoutent de nouveaux identifiants de véhicule. Si Fourways signale un doublon, choisis un identifiant propre à ton mod.

Modèles 3D personnalisés

Exporte ton modèle au format glTF binaire (.glb) et place-le dans models/. Dans la définition du véhicule, utilise "model": "models/mail.glb" à la place de look et indique dans length la longueur de la caisse en cases.

  • Compte une unité par case. Un bus mesure environ 0,46 unité et un bateau, environ 0,9.
  • Centre le modèle à l’origine, place sa base à Y = 0 et oriente-le vers −Z.
  • Les modèles personnalisés conservent les matériaux exportés. Les modèles réutilisés avec look prennent les couleurs de la compagnie.
  • Le modèle de locomotive couvre uniquement la motrice. Fourways fournit les wagons.

Tarifs des cargaisons et noms

Ajoute l’une de ces sections à data.json avec tes définitions de véhicules ou utilise-la seule.

{
  "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"]
}
  • Dans cargo, utilise les identifiants des cargaisons existantes. rate fixe le tarif d’une unité sur 25 cases et days indique le nombre de jours où le plein tarif s’applique. Les deux valeurs doivent être positives. Appuie sur Y pour voir le résultat dans Tarifs des cargaisons.
  • town_names combine un préfixe et un suffixe pour générer des noms de villes. Utilise replace: true pour remplacer les listes du jeu par les tiennes.
  • company_names fournit des noms pour les compagnies rivales. Le jeu les utilise avant de puiser dans sa propre liste.

Cartes de hauteur et préréglages

Place un PNG ou JPEG en niveaux de gris dans maps/. Le noir indique les points les plus bas, généralement la mer, et le blanc les plus hauts. Fourways adapte l’image à la taille du monde et la propose sous Carte dans Nouvelle partie.

Ajoute un fichier great_valley.json à côté de great_valley.png pour définir son nom, sa description et ses options de départ.

{
  "name": "Great Valley",
  "description": "A wide valley between two ranges.",
  "settings": {"w": 512, "h": 256, "towns": 1, "industries": 2, "year": 1970}
}
  • La largeur et la hauteur peuvent chacune être de 64, 128, 256, 512 ou 1024 cases.
  • La densité des villes et des industries va de 0 (peu) à 3 (très dense).
  • Les années de départ sont 1950, 1960, 1970, 1980, 1990 et 2000. Les joueurs peuvent modifier les préréglages avant de commencer.

Traductions et nouvelles langues

Place des fichiers texte se terminant par .lang.txt dans lang/. Commence chaque bloc par > , suivi du texte anglais exact. Ajoute une ligne par code de langue. Cela fonctionne pour les textes du jeu comme pour les noms et descriptions des véhicules du mod.

> Cost %s
es: Coste %s
ca: Cost %s
fr: Coût %s
  • Garde les marqueurs comme %s et %d dans le même ordre. Utilise \n pour les sauts de ligne et des guillemets doubles si le texte commence ou finit par un espace.
  • Pour ajouter une langue, saisis les traductions sous son code et traduis la clé English pour que la langue apparaisse sous son propre nom dans les Paramètres. Par exemple, mets nl: Nederlands sous > English.
  • Dans les scripts, place le texte dans L.t("English text") pour que les joueurs puissent le traduire avec les mêmes fichiers.

Scripts de jeu

Crée main.gd dans le dossier du mod et commence par extends Mod. Redéfinis les fonctions dont tu as besoin. Cet exemple verse 500 $ au joueur chaque mois et publie une actualité.

extends Mod

func _on_month(sim: Sim) -> void:
    sim.company.earn(500)
    news(sim, L.t("Monthly transport grant"), "good")
FonctionQuand Fourways l’appelle
_on_load()À l’application des mods actifs, y compris quand tu relances la recherche depuis l’écran des mods. Aucune partie n’est active à ce moment-là.
_on_new_game(sim)
_on_game_loaded(sim)
Quand un monde est créé ou qu’une sauvegarde a fini de se charger.
_on_day(sim)
_on_month(sim)
_on_year(sim, year)
Chaque jour, en fin de mois et au changement d’année. year désigne l’année qui vient de se terminer.
_on_delivery(sim, vehicle, station, amount)Après le déchargement d’un véhicule et le paiement du transport.
_on_vehicle_bought(sim, vehicle)
_on_station_built(sim, station)
Après un achat, ou après la construction ou l’agrandissement d’une gare.
_on_news(sim, item) → boolAvant la publication d’une actualité. Le dictionnaire contient text, kind, pos et day. Renvoie false pour la masquer ou true pour autoriser sa publication.
_save(sim) → Dictionary
_load(sim, data)
Renvoie un dictionnaire de données simples depuis _save. Si la sauvegarde contient des données pour ce mod, Fourways les transmet à _load avant d’appeler _on_game_loaded.

L’objet sim donne accès aux compagnies, véhicules, villes, industries et gares. Utilise sim.rng pour des événements aléatoires reproductibles et des méthodes comme sim.build_station() ou sim.buy_vehicle() pour effectuer des actions du joueur. La classe Mod fournit news() pour publier une actualité, note() pour écrire dans le journal et path() pour trouver des fichiers dans le dossier du mod.

Fonctions utilitaires des mods

  • news(sim, text, kind = "info", at = Vector2(-1, -1)) publie une actualité. Utilise good, info, warn ou bad pour kind. Indique une case dans at pour y centrer la vue au clic sur l’actualité.
  • note(text) écrit une entrée dans le journal avec l’identifiant du mod. Tu peux l’appeler depuis _on_load().
  • path(file) renvoie le chemin d’un fichier à partir du dossier du mod. Utilise info pour consulter des métadonnées comme id, name et version.

Actions courantes de la simulation

Tu peux appeler ces méthodes depuis une fonction qui reçoit sim. Si tu omets who, l’action utilise la compagnie du joueur. Si l’appel renvoie un dictionnaire, vérifie ok avant d’utiliser le résultat. En cas d’échec, consulte reason.

  • sim.build_line(kind, pts, who = null) construit une route (road) ou une voie ferrée (rail) sur des cases adjacentes successives. Passe un Array[Vector2i] typé.
  • sim.build_station(kind, pts, axis, who = null) construit ou agrandit une gare de type road, rail, dock ou air. Passe les cases dans un Array[Vector2i] et indique l’axe du quai pour la route ou le rail. En cas de réussite, le résultat contient station.
  • sim.buy_vehicle(model_id, cargo, wagons, stops, full_load_first, who = null, consist = [], transfer_at = []) achète un véhicule à partir d’un identifiant de modèle existant et d’un tableau de gares. consist permet de remplacer la cargaison et le nombre de wagons d’un train mixte. transfer_at indique les indices des arrêts où la cargaison est laissée pour un autre véhicule. En cas de réussite, le résultat contient vehicle.
  • sim.town_action(town, action, who = null) exécute advertise, trees ou fund et renvoie le coût de l’action dans cost.
  • sim.company.earn(amount) crédite la compagnie du joueur. sim.company.spend(cost, category) enregistre une dépense et renvoie false si la compagnie ne peut pas la payer. Parmi les catégories possibles figurent construction et vehicles.
  • town.rating(company_id) lit l’avis du conseil municipal. town.change_rating(company_id, delta, why = "", day = -1) l’ajuste entre 0 et 100. Indique un motif et sim.day_int pour enregistrer la modification dans la fenêtre de la ville.

Toutes les fonctions définies par Mod sont répertoriées ici. Les scripts peuvent aussi appeler d’autres méthodes du jeu et de Godot. Elles figurent dans le code du jeu et du moteur.

Les mods avec scripts s’exécutent avec les permissions du jeu. Active uniquement des scripts provenant d’auteurs de confiance.

Sauvegardes et partage

Pour partager un mod, compresse son dossier en ZIP. Fourways accepte aussi les ZIP contenant mod.json à la racine. Garde les mêmes identifiants de mod et de véhicules d’une version à l’autre pour que les sauvegardes puissent les retrouver.

La sauvegarde enregistre les mods actifs et peut conserver les données des scripts. Si un mod manque ou est désactivé au chargement, Fourways t’avertit et écarte les véhicules dont le modèle est indisponible. Réactive les mods d’origine avant de charger une partie qui en dépend.

Les formats intégrés couvrent le contenu décrit ici. Pour ajouter des types de cargaison, des industries ou des bâtiments urbains, régler les coûts de construction individuellement, remplacer les modèles ou sons du jeu ou modifier l’interface, il faut intervenir dans le code du jeu.