File e ID della mod
Ogni mod è una cartella che contiene mod.json. Aggiungi solo gli altri file che usa la tua mod.
my_mod/
mod.json
data.json
lang/*.lang.txt
maps/
models/*.glb
main.gd
Ecco un mod.json completo. Solo id è obbligatorio. Scegli un ID univoco e mantienilo quando pubblichi aggiornamenti, perché i salvataggi lo usano per riconoscere la mod.
{
"id": "north_line_mail",
"name": "North Line Mail",
"version": "1.0",
"author": "Your name",
"description": "A diesel for overnight mail trains."
}
Apri Mod nella schermata iniziale e scegli Apri la cartella mods. Metti lì la cartella o lo ZIP, fai clic su Cerca di nuovo e spunta la mod. Durante le modifiche lavora sulla cartella estratta, così puoi salvare e ripetere la ricerca. Le modifiche si applicano alla prossima partita che inizi o carichi.
Veicoli
In data.json, inserisci ogni veicolo sotto vehicles con un ID univoco. Per esempio, north_line_mail_diesel aggiunge una locomotiva con l’aspetto della diesel del gioco 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."
}
}
}
| Campo | Valore |
|---|---|
name, desc | Nome visualizzato e descrizione facoltativa nel negozio. |
kind | rail, road, water o air. |
look o model | Riusa un modello dello stesso tipo o indica il percorso del tuo modello. Alcuni ID del gioco base sono steam, diesel, bus, truck, ferry, freighter, prop e jet. |
cargos | Elenco con almeno un ID di carico esistente, per esempio pax, mail, coal, wood, goods e food. |
max_wagons o cap | Per le locomotive, max_wagons è obbligatorio. Per gli altri veicoli, cap indica la capacità. |
speed | Caselle per giorno di gioco. Moltiplica per 30 per ottenere la velocità in km/h mostrata nel negozio. |
cost, run | Prezzo di acquisto e costo di esercizio annuo, in dollari interi. I vagoni si aggiungono al prezzo del treno. |
year | Primo anno di disponibilità nel negozio. Ometti il campo per renderlo disponibile fin dall’inizio. |
rel | Affidabilità iniziale facoltativa, tra 0 e 1. Il valore predefinito dipende dall’anno del veicolo. |
electric | Usa true se la locomotiva richiede la linea aerea. |
Le mod aggiungono nuovi ID dei veicoli. Se Fourways segnala un ID duplicato, scegline uno specifico per la tua mod.
Modelli 3D personalizzati
Esporta il modello in glTF binario (.glb) e mettilo in models/. Nella definizione del veicolo, usa "model": "models/mail.glb" al posto di look e imposta in length la lunghezza della carrozzeria in caselle.
- Usa un’unità per casella. Un autobus è lungo circa 0,46 unità e una nave circa 0,9.
- Centra il modello sull’origine, posiziona la base a Y = 0 e orientalo verso −Z.
- I modelli personalizzati mantengono i materiali esportati. Quelli riutilizzati con
lookusano i colori della compagnia. - Il modello della locomotiva comprende solo la motrice. Fourways fornisce i vagoni.
Tariffe dei carichi e nomi
Aggiungi una di queste sezioni a data.json insieme alle definizioni dei veicoli oppure usala da sola.
{
"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"]
}
- In
cargo, usa ID di carichi esistenti.rateè la tariffa per un’unità su 25 caselle edaysindica per quanti giorni si paga la tariffa piena. Entrambi i valori devono essere positivi. Premi Y per vedere il risultato in Tariffe dei carichi. town_namescombina un prefisso e un suffisso per generare i nomi delle città. Usareplace: trueper sostituire gli elenchi del gioco con i tuoi.company_namesfornisce nomi per le compagnie rivali. Il gioco li usa prima di attingere al suo elenco.
Mappe altimetriche e impostazioni predefinite
Metti un PNG o JPEG in scala di grigi in maps/. Il nero indica il terreno più basso, di solito il mare, e il bianco quello più alto. Fourways adatta l’immagine alle dimensioni del mondo e la mostra sotto Mappa in Nuova partita.
Affianca a great_valley.png un file great_valley.json per definirne nome, descrizione e opzioni iniziali.
{
"name": "Great Valley",
"description": "A wide valley between two ranges.",
"settings": {"w": 512, "h": 256, "towns": 1, "industries": 2, "year": 1970}
}
- Larghezza e altezza possono essere di 64, 128, 256, 512 o 1024 caselle ciascuna.
- La densità di città e industrie va da 0 (poche) a 3 (molto numerose).
- Gli anni di partenza sono 1950, 1960, 1970, 1980, 1990 e 2000. I giocatori possono cambiare le impostazioni prima di iniziare.
Traduzioni e nuove lingue
Metti in lang/ file di testo semplice con estensione .lang.txt. Inizia ogni blocco con > e il testo inglese esatto. Aggiungi una riga per ogni codice lingua. Funziona sia per i testi del gioco sia per i nomi e le descrizioni dei veicoli della mod.
> Cost %s
es: Coste %s
ca: Cost %s
fr: Coût %s
- Mantieni nello stesso ordine i segnaposto come
%se%d. Usa\nper andare a capo e le virgolette doppie se il testo inizia o finisce con uno spazio. - Per aggiungere una lingua, scrivi le traduzioni sotto il suo codice e traduci la chiave
Englishaffinché il nome della lingua compaia nelle Impostazioni. Per esempio, scrivinl: Nederlandssotto> English. - Negli script, racchiudi il testo in
L.t("English text")per permettere ai giocatori di tradurlo con gli stessi file.
Script di gioco
Crea main.gd nella cartella della mod e inizia con extends Mod. Ridefinisci le funzioni che ti servono. Questo esempio assegna al giocatore 500 $ al mese e pubblica una notizia.
extends Mod
func _on_month(sim: Sim) -> void:
sim.company.earn(500)
news(sim, L.t("Monthly transport grant"), "good")
| Funzione | Quando Fourways la chiama |
|---|---|
_on_load() | Quando si applicano le mod attive, anche dopo una nuova ricerca dalla schermata Mod. In quel momento non c’è una partita attiva. |
_on_new_game(sim)_on_game_loaded(sim) | Quando viene creato un mondo o termina il caricamento di un salvataggio. |
_on_day(sim)_on_month(sim)_on_year(sim, year) | Ogni giorno, a fine mese e al cambio dell’anno. year è l’anno appena concluso. |
_on_delivery(sim, vehicle, station, amount) | Dopo che un veicolo ha scaricato e il trasporto è stato pagato. |
_on_vehicle_bought(sim, vehicle)_on_station_built(sim, station) | Dopo un acquisto o dopo la costruzione o l’ampliamento di una stazione. |
_on_news(sim, item) → bool | Prima di pubblicare una notizia. Il dizionario contiene text, kind, pos e day. Restituisci false per nasconderla o true per consentirne la pubblicazione. |
_save(sim) → Dictionary_load(sim, data) | Restituisci un dizionario di dati semplici da _save. Se il salvataggio contiene dati per questa mod, Fourways li passa a _load prima di chiamare _on_game_loaded. |
L’oggetto sim dà accesso a compagnie, veicoli, città, industrie e stazioni. Usa sim.rng per eventi casuali riproducibili e metodi come sim.build_station() o sim.buy_vehicle() per eseguire azioni del giocatore. La classe Mod offre news() per pubblicare notizie, note() per scrivere nel registro e path() per trovare file nella cartella della mod.
Funzioni di supporto delle mod
news(sim, text, kind = "info", at = Vector2(-1, -1))pubblica una notizia. Usagood,info,warnobadperkind. Indica una casella inatper spostare lì la vista quando si fa clic sulla notizia.note(text)scrive nel registro una voce con l’ID della mod. Puoi chiamarla da_on_load().path(file)restituisce il percorso di un file a partire dalla cartella della mod. Usainfoper consultare metadati comeid,nameeversion.
Azioni comuni della simulazione
Puoi chiamare questi metodi da una funzione che riceve sim. Se ometti who, si usa la compagnia del giocatore. Se la chiamata restituisce un dizionario, controlla ok prima di usare il risultato. In caso di errore, leggi reason.
sim.build_line(kind, pts, who = null)costruisce una strada (road) o un binario (rail) su caselle adiacenti consecutive. Passa unArray[Vector2i]tipizzato.sim.build_station(kind, pts, axis, who = null)costruisce o amplia una stazione di tiporoad,rail,dockoair. Passa le caselle comeArray[Vector2i]e l’asse della banchina per strada o ferrovia. Se l’operazione riesce, il risultato contienestation.sim.buy_vehicle(model_id, cargo, wagons, stops, full_load_first, who = null, consist = [], transfer_at = [])acquista un veicolo usando l’ID di un modello esistente e un elenco di stazioni.consistpuò sostituire carico e numero di vagoni per un treno misto.transfer_atelenca gli indici delle fermate in cui lasciare il carico per un altro veicolo. Se l’operazione riesce, il risultato contienevehicle.sim.town_action(town, action, who = null)esegueadvertise,treesofunde restituisce il costo dell’azione incost.sim.company.earn(amount)accredita denaro alla compagnia del giocatore.sim.company.spend(cost, category)registra una spesa e restituiscefalsese i fondi sono insufficienti. Due categorie possibili sonoconstructionevehicles.town.rating(company_id)legge il giudizio del consiglio comunale.town.change_rating(company_id, delta, why = "", day = -1)lo modifica entro l’intervallo da 0 a 100. Passa un motivo esim.day_intper registrare la modifica nella finestra della città.
Qui trovi tutte le funzioni definite da Mod. Gli script possono chiamare anche altri metodi del gioco e di Godot. Puoi consultarli nel codice del gioco e del motore.
Le mod con script vengono eseguite con i permessi del gioco. Attiva solo script di autori di cui ti fidi.
Salvataggi e condivisione
Per condividere una mod, comprimi la sua cartella in formato ZIP. Fourways accetta anche gli ZIP con mod.json al primo livello. Mantieni gli stessi ID della mod e dei veicoli da una versione all’altra, così i salvataggi potranno ritrovarli.
Il salvataggio registra le mod attive e può conservare i dati degli script. Se una mod manca o è disattivata al caricamento, Fourways ti avvisa e omette i veicoli con modelli indisponibili. Riattiva le mod originali prima di caricare un salvataggio che le usa.
I formati integrati coprono i contenuti descritti qui. Per aggiungere tipi di carico, industrie o edifici urbani, cambiare singoli costi di costruzione, sostituire modelli o suoni del gioco o modificare l’interfaccia, occorre intervenire sul codice del gioco.