Fitxers i identificadors del mod
Cada mod és una carpeta que conté mod.json. Afegeix-hi només els altres fitxers que faci servir el mod.
my_mod/
mod.json
data.json
lang/*.lang.txt
maps/
models/*.glb
main.gd
Aquest és un mod.json complet. L’únic camp obligatori és id. Tria un identificador únic i conserva’l quan publiquis actualitzacions, perquè les partides desades l’utilitzen per identificar el mod.
{
"id": "north_line_mail",
"name": "North Line Mail",
"version": "1.0",
"author": "Your name",
"description": "A diesel for overnight mail trains."
}
Obre Mods a la pantalla de títol i tria Obre la carpeta de mods. Posa-hi la carpeta o el ZIP, fes clic a Torna a buscar i marca el mod. Mentre l’editis, treballa amb la carpeta descomprimida per poder desar els canvis i tornar a buscar. Els canvis s’apliquen quan comencis o carreguis la partida següent.
Vehicles
A data.json, posa cada vehicle dins de vehicles amb un identificador únic. Per exemple, north_line_mail_diesel afegeix una locomotora amb l’aspecte de la dièsel del joc 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."
}
}
}
| Camp | Valor |
|---|---|
name, desc | Nom visible i descripció opcional per a la botiga. |
kind | rail, road, water o air. |
look o model | Reutilitza un model del mateix tipus o indica el camí al teu model. Alguns identificadors del joc base són steam, diesel, bus, truck, ferry, freighter, prop i jet. |
cargos | Llista amb almenys un identificador de càrrega existent. Per exemple, pax, mail, coal, wood, goods i food. |
max_wagons o cap | Les locomotores requereixen max_wagons. Per als altres vehicles, cap indica la capacitat. |
speed | Caselles per dia de joc. Multiplica per 30 per obtenir la velocitat en km/h que mostra la botiga. |
cost, run | Preu de compra i cost anual de funcionament, en dòlars sencers. Els vagons s’afegeixen al preu del tren. |
year | Primer any en què apareix a la botiga. Omet-lo perquè estigui disponible des del principi. |
rel | Fiabilitat inicial opcional, entre 0 i 1. El valor per defecte depèn de l’any del vehicle. |
electric | Fes servir true si la locomotora necessita catenària. |
Els mods afegeixen identificadors de vehicle nous. Si Fourways n’indica un de duplicat, tria un identificador propi del teu mod.
Models 3D personalitzats
Exporta el model com a glTF binari (.glb) i desa’l a models/. A la definició del vehicle, fes servir "model": "models/mail.glb" en comptes de look i indica a length la llargada de la carrosseria en caselles.
- Fes servir una unitat per casella. Un autobús fa unes 0,46 unitats de llarg i un vaixell, unes 0,9.
- Centra el model a l’origen, posa’n la base a Y = 0 i orienta’l cap a −Z.
- Els models personalitzats conserven els materials amb què s’han exportat. Els reutilitzats amb
lookfan servir els colors de la companyia. - El model de locomotora només inclou la màquina. Fourways hi posa els vagons.
Tarifes de càrrega i noms
Afegeix qualsevol d’aquestes seccions a data.json al costat de les definicions de vehicles o fes-les servir soles.
{
"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"]
}
- A
cargo, fes servir identificadors de càrregues existents.rateés la tarifa per una unitat transportada 25 caselles idaysés el nombre de dies que es paga la tarifa sencera. Tots dos valors han de ser positius. Prem Y per veure el resultat a Tarifes de càrrega. town_namescombina un prefix i un sufix per generar noms de pobles. Fes servirreplace: trueper substituir les llistes del joc per les teves.company_namesaporta noms per a les companyies rivals. El joc fa servir aquests noms abans de recórrer als del joc base.
Mapes d’altura i valors predefinits
Posa un PNG o JPEG en escala de grisos a maps/. El negre marca el terreny més baix, normalment el mar, i el blanc el més alt. Fourways adapta la imatge a la mida del món i la mostra a Mapa quan obres Partida nova.
Afegeix un fitxer great_valley.json al costat de great_valley.png per definir-ne el nom, la descripció i les opcions inicials.
{
"name": "Great Valley",
"description": "A wide valley between two ranges.",
"settings": {"w": 512, "h": 256, "towns": 1, "industries": 2, "year": 1970}
}
- L’amplada i l’alçada poden ser de 64, 128, 256, 512 o 1024 caselles cadascuna.
- La densitat de pobles i indústries va de 0 (pocs) a 3 (molt nombrosos).
- Els anys d’inici són 1950, 1960, 1970, 1980, 1990 i 2000. Els jugadors poden canviar els valors abans de començar.
Traduccions i idiomes nous
Posa a lang/ fitxers de text pla que acabin en .lang.txt. Comença cada bloc amb > i el text exacte en anglès. Afegeix una línia per codi d’idioma. Serveix tant per als textos del joc com per als noms i descripcions dels vehicles del mod.
> Cost %s
es: Coste %s
ca: Cost %s
fr: Coût %s
- Mantén en el mateix ordre els marcadors com
%si%d. Fes servir\nper als salts de línia i cometes dobles si el text comença o acaba amb un espai. - Per afegir un idioma, posa les traduccions sota el seu codi i tradueix la clau
Englishperquè el nom de l’idioma aparegui a Configuració. Per exemple, posanl: Nederlandsa sota de> English. - Als scripts, posa el text dins de
L.t("English text")perquè els jugadors el puguin traduir amb els mateixos fitxers.
Scripts de joc
Crea main.gd a la carpeta del mod i comença amb extends Mod. Redefineix les funcions que necessitis. Aquest exemple dona 500 $ al jugador cada mes i publica una notícia.
extends Mod
func _on_month(sim: Sim) -> void:
sim.company.earn(500)
news(sim, L.t("Monthly transport grant"), "good")
| Funció | Quan la crida Fourways |
|---|---|
_on_load() | Quan s’apliquen els mods actius, també si tornes a buscar des de la pantalla de mods. Encara no hi ha cap partida activa. |
_on_new_game(sim)_on_game_loaded(sim) | Quan es crea un món o s’acaba de carregar una partida. |
_on_day(sim)_on_month(sim)_on_year(sim, year) | Cada dia, a final de mes i quan canvia l’any. year és l’any que s’acaba d’acabar. |
_on_delivery(sim, vehicle, station, amount) | Quan un vehicle descarrega i es cobra el transport. |
_on_vehicle_bought(sim, vehicle)_on_station_built(sim, station) | Després d’una compra o de construir o ampliar una estació. |
_on_news(sim, item) → bool | Abans de publicar una notícia. El diccionari conté text, kind, pos i day. Retorna false per amagar-la o true per mostrar-la. |
_save(sim) → Dictionary_load(sim, data) | Retorna un diccionari amb dades simples des de _save. Si la partida conté dades d’aquest mod, Fourways crida _load amb aquestes dades abans de _on_game_loaded. |
L’objecte sim dona accés a companyies, vehicles, pobles, indústries i estacions. Fes servir sim.rng per generar esdeveniments aleatoris reproduïbles i mètodes com sim.build_station() o sim.buy_vehicle() per executar accions del jugador. La classe Mod ofereix news() per publicar notícies, note() per escriure al registre i path() per trobar fitxers a la carpeta del mod.
Funcions auxiliars dels mods
news(sim, text, kind = "info", at = Vector2(-1, -1))publica una notícia. Fes servirgood,info,warnobadakind. Indica una casella aatperquè la vista hi salti quan es faci clic a la notícia.note(text)escriu una entrada al registre amb l’identificador del mod. La pots cridar des de_on_load().path(file)retorna el camí d’un fitxer a partir de la carpeta del mod. Fes servirinfoper consultar metadades comid,nameiversion.
Accions habituals de la simulació
Pots cridar aquests mètodes des d’una funció que rebi sim. Si omets who, es fa servir la companyia del jugador. Si la crida retorna un diccionari, comprova ok abans de fer servir el resultat. Si falla, consulta reason.
sim.build_line(kind, pts, who = null)construeix una carretera (road) o una via (rail) per caselles adjacents consecutives. Passa-hi unArray[Vector2i]tipat.sim.build_station(kind, pts, axis, who = null)construeix o amplia una estació de tipusroad,rail,dockoair. Passa les caselles en unArray[Vector2i]i l’eix de l’andana per a carretera o ferrocarril. Si va bé, el resultat contéstation.sim.buy_vehicle(model_id, cargo, wagons, stops, full_load_first, who = null, consist = [], transfer_at = [])compra un vehicle amb un identificador de model existent i una llista d’estacions.consistpermet definir la càrrega i el nombre de vagons d’un tren mixt.transfer_atindica els índexs de les parades on es deixa càrrega per a un altre vehicle. Si va bé, el resultat contévehicle.sim.town_action(town, action, who = null)executaadvertise,treesofundi retorna el cost de l’acció acost.sim.company.earn(amount)ingressa diners a la companyia del jugador.sim.company.spend(cost, category)registra una despesa i retornafalsesi la companyia no té prou diners. Dues categories possibles sónconstructionivehicles.town.rating(company_id)consulta la valoració de l’ajuntament.town.change_rating(company_id, delta, why = "", day = -1)l’ajusta dins de l’interval de 0 a 100. Passa un motiu isim.day_intper registrar el canvi a la finestra del poble.
Aquí es llisten totes les funcions que defineix Mod. Els scripts també poden cridar altres mètodes del joc i de Godot. Els pots consultar al codi del joc i del motor.
Els mods amb scripts s’executen amb els permisos del joc. Activa només scripts d’autors de confiança.
Partides desades i distribució
Per compartir un mod, comprimeix la carpeta en ZIP. Fourways també accepta ZIP amb mod.json al nivell superior. Conserva els identificadors del mod i dels vehicles entre versions perquè les partides desades els puguin trobar.
La partida desada registra els mods actius i pot conservar dades dels scripts. Si falta un mod o està desactivat quan carregues la partida, Fourways t’avisa i omet els vehicles amb models que no estan disponibles. Torna a activar els mods que feia servir la partida abans de carregar-la.
Els formats disponibles cobreixen el contingut descrit aquí. Afegir tipus de càrrega, indústries o edificis urbans, ajustar costos de construcció individuals, substituir models o sons del joc o canviar la interfície requereix treballar amb el codi del joc.