Archivos e identificadores del mod
Cada mod es una carpeta que contiene mod.json. Añade solo los demás archivos que use tu mod.
my_mod/
mod.json
data.json
lang/*.lang.txt
maps/
models/*.glb
main.gd
Este es un mod.json completo. El único campo obligatorio es id. Elige un identificador único y mantenlo al publicar actualizaciones, ya que las partidas guardadas lo usan para identificar el mod.
{
"id": "north_line_mail",
"name": "North Line Mail",
"version": "1.0",
"author": "Your name",
"description": "A diesel for overnight mail trains."
}
Abre Mods en la pantalla de título y elige Abrir la carpeta de mods. Pon allí la carpeta o el ZIP, haz clic en Buscar de nuevo y marca el mod. Mientras lo edites, trabaja con la carpeta descomprimida para poder guardar y volver a buscar. Los cambios se aplican al iniciar o cargar la siguiente partida.
Vehículos
En data.json, coloca cada vehículo dentro de vehicles con un identificador único. Por ejemplo, north_line_mail_diesel añade una locomotora con el aspecto de la diésel del juego 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 | Valor |
|---|---|
name, desc | Nombre visible y descripción opcional para la tienda. |
kind | rail, road, water o air. |
look o model | Reutiliza un modelo del mismo tipo o indica la ruta a tu modelo. Algunos identificadores del juego base son steam, diesel, bus, truck, ferry, freighter, prop y jet. |
cargos | Lista con al menos un identificador de carga existente. Por ejemplo, pax, mail, coal, wood, goods y food. |
max_wagons o cap | Las locomotoras requieren max_wagons. En el resto de los vehículos, cap indica la capacidad. |
speed | Casillas por día de juego. Multiplica por 30 para obtener la velocidad en km/h que muestra la tienda. |
cost, run | Precio de compra y coste anual de funcionamiento, en dólares enteros. Los vagones se suman al precio del tren. |
year | Primer año en que aparece en la tienda. Omítelo para que esté disponible desde el principio. |
rel | Fiabilidad inicial opcional, entre 0 y 1. El valor predeterminado depende del año del vehículo. |
electric | Usa true si la locomotora necesita catenaria. |
Los mods añaden nuevos identificadores de vehículo. Si Fourways indica que hay uno duplicado, elige un identificador propio de tu mod.
Modelos 3D personalizados
Exporta tu modelo como glTF binario (.glb) y guárdalo en models/. En la definición del vehículo, usa "model": "models/mail.glb" en lugar de look y pon en length la longitud de la carrocería en casillas.
- Usa una unidad por casilla. Un autobús mide unas 0,46 unidades y un barco, unas 0,9.
- Centra el modelo en el origen, colócalo con la base en Y = 0 y oriéntalo hacia −Z.
- Los modelos personalizados conservan sus materiales al exportarlos. Los reutilizados con
lookusan los colores de la compañía. - El modelo de locomotora solo incluye la máquina. Fourways aporta los vagones.
Tarifas de carga y nombres
Añade cualquiera de estas secciones a data.json junto con las definiciones de vehículos o úsalas por separado.
{
"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"]
}
- En
cargo, usa identificadores de cargas existentes.ratees la tarifa por una unidad a lo largo de 25 casillas ydayses el número de días que se paga la tarifa completa. Ambos valores deben ser positivos. Pulsa Y para ver el resultado en Tarifas de carga. town_namescombina un prefijo y un sufijo para generar nombres de pueblos. Usareplace: truepara sustituir las listas del juego por las tuyas.company_namesaporta nombres para las compañías rivales. El juego usa estos nombres antes de recurrir a los del juego base.
Mapas de altura y ajustes predefinidos
Pon un PNG o JPEG en escala de grises en maps/. El negro marca el terreno más bajo, normalmente el mar, y el blanco el más alto. Fourways adapta la imagen al tamaño del mundo y la muestra en Mapa al abrir Nueva partida.
Añade un archivo great_valley.json junto a great_valley.png para definir el nombre, la descripción y las opciones iniciales.
{
"name": "Great Valley",
"description": "A wide valley between two ranges.",
"settings": {"w": 512, "h": 256, "towns": 1, "industries": 2, "year": 1970}
}
- La anchura y la altura pueden ser de 64, 128, 256, 512 o 1024 casillas cada una.
- La densidad de pueblos e industrias va de 0 (pocos) a 3 (muy numerosos).
- Los años de inicio son 1950, 1960, 1970, 1980, 1990 y 2000. Los jugadores pueden cambiar los ajustes antes de empezar.
Traducciones e idiomas nuevos
Pon en lang/ archivos de texto plano que terminen en .lang.txt. Empieza cada bloque con > y el texto exacto en inglés. Añade una línea por código de idioma. Sirve tanto para los textos del juego como para los nombres y descripciones de los vehículos del mod.
> Cost %s
es: Coste %s
ca: Cost %s
fr: Coût %s
- Mantén en el mismo orden los marcadores como
%sy%d. Usa\npara los saltos de línea y comillas dobles si el texto empieza o acaba con un espacio. - Para añadir un idioma, pon las traducciones bajo su código y traduce la clave
Englishpara que el nombre del idioma aparezca en Ajustes. Por ejemplo, ponnl: Nederlandsdebajo de> English. - En los scripts, pon el texto dentro de
L.t("English text")para que los jugadores puedan traducirlo con los mismos archivos.
Scripts de juego
Crea main.gd en la carpeta del mod y empieza con extends Mod. Redefine las funciones que necesites. Este ejemplo concede 500 $ al jugador cada mes y publica una noticia.
extends Mod
func _on_month(sim: Sim) -> void:
sim.company.earn(500)
news(sim, L.t("Monthly transport grant"), "good")
| Función | Cuándo la llama Fourways |
|---|---|
_on_load() | Al aplicar los mods activos, también cuando vuelves a buscar desde la pantalla de mods. Todavía no hay una partida activa. |
_on_new_game(sim)_on_game_loaded(sim) | Al crear un mundo o al terminar de cargar una partida. |
_on_day(sim)_on_month(sim)_on_year(sim, year) | Cada día, a fin de mes y al cambiar de año. year es el año que acaba de terminar. |
_on_delivery(sim, vehicle, station, amount) | Cuando un vehículo descarga y se cobra el transporte. |
_on_vehicle_bought(sim, vehicle)_on_station_built(sim, station) | Después de una compra o de construir o ampliar una estación. |
_on_news(sim, item) → bool | Antes de publicar una noticia. El diccionario contiene text, kind, pos y day. Devuelve false para ocultarla o true para mostrarla. |
_save(sim) → Dictionary_load(sim, data) | Devuelve un diccionario con datos simples desde _save. Si la partida contiene datos de este mod, Fourways llama a _load con esos datos antes de _on_game_loaded. |
El objeto sim permite acceder a compañías, vehículos, pueblos, industrias y estaciones. Usa sim.rng para que los eventos aleatorios sean reproducibles y métodos como sim.build_station() o sim.buy_vehicle() para ejecutar acciones del jugador. La clase Mod ofrece news() para publicar noticias, note() para escribir en el registro y path() para localizar archivos en la carpeta del mod.
Funciones auxiliares de los mods
news(sim, text, kind = "info", at = Vector2(-1, -1))publica una noticia. Usagood,info,warnobadenkind. Indica una casilla enatpara que la vista salte allí al hacer clic en la noticia.note(text)escribe una entrada en el registro con el identificador del mod. Puedes llamarla desde_on_load().path(file)devuelve la ruta de un archivo a partir de la carpeta del mod. Usainfopara consultar metadatos comoid,nameyversion.
Acciones habituales de la simulación
Puedes llamar a estos métodos desde una función que reciba sim. Si omites who, se usa la compañía del jugador. Si la llamada devuelve un diccionario, comprueba ok antes de usar el resultado. Si falla, consulta reason.
sim.build_line(kind, pts, who = null)construye una carretera (road) o una vía (rail) por casillas adyacentes consecutivas. Pasa unArray[Vector2i]tipado.sim.build_station(kind, pts, axis, who = null)construye o amplía una estación de tiporoad,rail,dockoair. Pasa las casillas en unArray[Vector2i]y el eje del andén para carretera o ferrocarril. Si tiene éxito, el resultado contienestation.sim.buy_vehicle(model_id, cargo, wagons, stops, full_load_first, who = null, consist = [], transfer_at = [])compra un vehículo con un identificador de modelo existente y una lista de estaciones.consistpermite definir la carga y el número de vagones de un tren mixto.transfer_atindica los índices de las paradas donde se deja carga para otro vehículo. Si tiene éxito, el resultado contienevehicle.sim.town_action(town, action, who = null)ejecutaadvertise,treesofundy devuelve el coste de la acción encost.sim.company.earn(amount)ingresa dinero en la compañía del jugador.sim.company.spend(cost, category)registra un gasto y devuelvefalsesi la compañía no tiene fondos. Dos categorías posibles sonconstructionyvehicles.town.rating(company_id)consulta la valoración del ayuntamiento.town.change_rating(company_id, delta, why = "", day = -1)la ajusta dentro del intervalo de 0 a 100. Pasa un motivo ysim.day_intpara registrar el cambio en la ventana del pueblo.
Aquí se enumeran todas las funciones que define Mod. Los scripts también pueden llamar a otros métodos del juego y de Godot. Puedes consultarlos en el código del juego y del motor.
Los mods con scripts se ejecutan con los permisos del juego. Activa solo scripts de autores en los que confíes.
Partidas guardadas y distribución
Para compartir un mod, comprime su carpeta en ZIP. Fourways también acepta ZIP con mod.json en el nivel superior. Conserva los identificadores del mod y de los vehículos entre versiones para que las partidas guardadas puedan encontrarlos.
La partida guardada registra los mods activos y puede guardar datos de los scripts. Si falta un mod o está desactivado al cargar, Fourways te avisa y omite los vehículos cuyos modelos no estén disponibles. Vuelve a activar los mods que usaba la partida antes de cargarla.
Los formatos disponibles cubren el contenido descrito aquí. Añadir tipos de carga, industrias o edificios urbanos, ajustar costes de construcción individuales, sustituir modelos o sonidos del juego o cambiar la interfaz requiere trabajar con el código del juego.