Arquivos e IDs do mod
Cada mod é uma pasta com o arquivo mod.json. Inclua apenas os outros arquivos usados pelo seu mod.
my_mod/
mod.json
data.json
lang/*.lang.txt
maps/
models/*.glb
main.gd
Este é um mod.json completo. Só id é obrigatório. Escolha um ID exclusivo e mantenha-o nas atualizações, pois os jogos salvos usam esse ID para reconhecer o mod.
{
"id": "north_line_mail",
"name": "North Line Mail",
"version": "1.0",
"author": "Your name",
"description": "A diesel for overnight mail trains."
}
Abra Mods na tela inicial e escolha Abrir a pasta de mods. Coloque a pasta ou o ZIP lá, clique em Procurar de novo e marque o mod. Edite na pasta extraída para salvar as alterações e procurar de novo. As mudanças valem para o próximo jogo que você começar ou carregar.
Veículos
Em data.json, coloque cada veículo em vehicles com um ID exclusivo. Por exemplo, north_line_mail_diesel adiciona uma locomotiva com a aparência do modelo a diesel do jogo 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 | Nome exibido e descrição opcional na loja. |
kind | rail, road, water ou air. |
look ou model | Reaproveite um modelo do mesmo tipo ou informe o caminho do seu próprio modelo. Alguns IDs do jogo base são steam, diesel, bus, truck, ferry, freighter, prop e jet. |
cargos | Lista com pelo menos um ID de carga existente, como pax, mail, coal, wood, goods e food. |
max_wagons ou cap | Locomotivas exigem max_wagons. Nos demais veículos, cap indica a capacidade. |
speed | Casas por dia de jogo. Multiplique por 30 para obter a velocidade em km/h exibida na loja. |
cost, run | Preço de compra e custo anual de operação, em dólares inteiros. Os vagões entram no preço do trem. |
year | Primeiro ano em que aparece na loja. Omita o campo para deixar o veículo disponível desde o início. |
rel | Confiabilidade inicial opcional entre 0 e 1. O valor padrão depende do ano do veículo. |
electric | Use true se a locomotiva precisar de rede aérea. |
Os mods adicionam novos IDs de veículos. Se o Fourways apontar um ID duplicado, escolha um exclusivo para seu mod.
Modelos 3D próprios
Exporte seu modelo como glTF binário (.glb) e coloque-o em models/. Na definição do veículo, use "model": "models/mail.glb" no lugar de look e informe em length o comprimento da carroceria em casas.
- Use uma unidade por casa. Um ônibus tem cerca de 0,46 unidade de comprimento e um navio, cerca de 0,9.
- Centralize o modelo na origem, posicione a base em Y = 0 e aponte a frente para −Z.
- Modelos próprios mantêm os materiais exportados. Modelos reaproveitados com
lookusam as cores da empresa. - O modelo da locomotiva inclui apenas a máquina. O Fourways fornece os vagões.
Tarifas de carga e nomes
Adicione qualquer uma destas seções a data.json junto às definições dos veículos ou use-as separadamente.
{
"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"]
}
- Em
cargo, use IDs de cargas existentes.rateé a tarifa por unidade transportada por 25 casas, edaysindica por quantos dias vale a tarifa integral. Os dois valores precisam ser positivos. Pressione Y para conferir em Tarifas de carga. town_namescombina um prefixo e um sufixo para gerar nomes de cidades. Usereplace: truepara trocar as listas do jogo pelas suas.company_namesfornece nomes para as empresas rivais. O jogo usa esses nomes antes de recorrer à lista padrão.
Mapas de altura e configurações predefinidas
Coloque uma imagem PNG ou JPEG em tons de cinza em maps/. O preto indica o terreno mais baixo, normalmente o mar, e o branco, o mais alto. O Fourways ajusta a imagem ao tamanho do mundo e a lista em Mapa, em Novo jogo.
Adicione um arquivo great_valley.json ao lado de great_valley.png para definir nome, descrição e opções iniciais.
{
"name": "Great Valley",
"description": "A wide valley between two ranges.",
"settings": {"w": 512, "h": 256, "towns": 1, "industries": 2, "year": 1970}
}
- A largura e a altura podem ter 64, 128, 256, 512 ou 1024 casas cada.
- A densidade de cidades e indústrias vai de 0 (poucas) a 3 (muitas).
- Os anos iniciais são 1950, 1960, 1970, 1980, 1990 e 2000. Os jogadores podem ajustar as configurações antes de começar.
Traduções e novos idiomas
Coloque em lang/ arquivos de texto simples terminados em .lang.txt. Comece cada bloco com > e o texto exato em inglês. Adicione uma linha por código de idioma. Isso vale tanto para textos do jogo quanto para nomes e descrições dos veículos do mod.
> Cost %s
es: Coste %s
ca: Cost %s
fr: Coût %s
- Mantenha marcadores como
%se%dna mesma ordem. Use\npara quebras de linha e aspas duplas se o texto começar ou terminar com espaço. - Para adicionar um idioma, inclua as traduções sob o código dele e traduza a chave
Englishpara exibir o nome do idioma em Configurações. Por exemplo, coloquenl: Nederlandsabaixo de> English. - Nos scripts, coloque o texto dentro de
L.t("English text")para que os jogadores possam traduzi-lo com os mesmos arquivos.
Scripts de jogo
Crie main.gd na pasta do mod e comece com extends Mod. Sobrescreva as funções de que precisar. Este exemplo paga ao jogador um subsídio mensal de $ 500 e publica uma notícia.
extends Mod
func _on_month(sim: Sim) -> void:
sim.company.earn(500)
news(sim, L.t("Monthly transport grant"), "good")
| Função | Quando o Fourways chama a função |
|---|---|
_on_load() | Quando os mods ativos são aplicados, inclusive ao procurar de novo na tela de mods. Ainda não há um jogo ativo. |
_on_new_game(sim)_on_game_loaded(sim) | Quando um mundo é criado ou termina o carregamento de um jogo salvo. |
_on_day(sim)_on_month(sim)_on_year(sim, year) | A cada dia, no fim do mês e na virada do ano. year é o ano que acabou de terminar. |
_on_delivery(sim, vehicle, station, amount) | Depois que um veículo descarrega e o transporte é pago. |
_on_vehicle_bought(sim, vehicle)_on_station_built(sim, station) | Depois de uma compra ou da construção ou ampliação de uma estação. |
_on_news(sim, item) → bool | Antes de publicar uma notícia. O dicionário contém text, kind, pos e day. Retorne false para ocultá-la ou true para permitir a publicação. |
_save(sim) → Dictionary_load(sim, data) | Retorne um dicionário de dados simples em _save. Se o jogo salvo contiver dados deste mod, o Fourways os passa a _load antes de chamar _on_game_loaded. |
O objeto sim dá acesso a empresas, veículos, cidades, indústrias e estações. Use sim.rng para eventos aleatórios reproduzíveis e métodos como sim.build_station() ou sim.buy_vehicle() para executar ações do jogador. A classe Mod fornece news() para publicar notícias, note() para escrever no log e path() para encontrar arquivos na pasta do mod.
Funções auxiliares dos mods
news(sim, text, kind = "info", at = Vector2(-1, -1))publica uma notícia. Usegood,info,warnoubademkind. Informe uma casa ematpara mover a vista até lá ao clicar na notícia.note(text)escreve uma entrada no log com o ID do mod. Você pode chamá-la em_on_load().path(file)retorna o caminho de um arquivo a partir da pasta do mod. Useinfopara consultar metadados comoid,nameeversion.
Ações comuns da simulação
Você pode chamar esses métodos de uma função que recebe sim. Se omitir who, será usada a empresa do jogador. Se a chamada retornar um dicionário, confira ok antes de usar o resultado. Em caso de falha, leia reason.
sim.build_line(kind, pts, who = null)constrói uma estrada (road) ou ferrovia (rail) por casas adjacentes consecutivas. Passe umArray[Vector2i]tipado.sim.build_station(kind, pts, axis, who = null)constrói ou amplia uma estação do tiporoad,rail,dockouair. Passe as casas como umArray[Vector2i]e o eixo da plataforma para estrada ou ferrovia. Em caso de sucesso, o resultado contémstation.sim.buy_vehicle(model_id, cargo, wagons, stops, full_load_first, who = null, consist = [], transfer_at = [])compra um veículo com um ID de modelo existente e uma lista de estações.consistpode substituir a carga e o número de vagões de um trem misto.transfer_atindica os índices das paradas onde a carga fica para outro veículo. Em caso de sucesso, o resultado contémvehicle.sim.town_action(town, action, who = null)executaadvertise,treesoufunde retorna o custo da ação emcost.sim.company.earn(amount)credita dinheiro à empresa do jogador.sim.company.spend(cost, category)registra um gasto e retornafalsese a empresa não tiver dinheiro suficiente. Duas categorias possíveis sãoconstructionevehicles.town.rating(company_id)consulta a avaliação do conselho municipal.town.change_rating(company_id, delta, why = "", day = -1)ajusta o valor dentro do intervalo de 0 a 100. Passe um motivo esim.day_intpara registrar a mudança na janela da cidade.
Aqui estão todas as funções definidas por Mod. Scripts também podem chamar outros métodos do jogo e do Godot. Consulte esses métodos no código do jogo e do motor.
Mods com scripts rodam com as permissões do jogo. Ative apenas scripts de autores em quem você confia.
Jogos salvos e compartilhamento
Para compartilhar um mod, compacte a pasta dele em ZIP. O Fourways também aceita ZIPs com mod.json no nível superior. Mantenha os IDs do mod e dos veículos entre as versões para os jogos salvos conseguirem encontrá-los.
O jogo salvo registra quais mods estavam ativos e pode armazenar dados dos scripts. Se faltar um mod ou ele estiver desativado no carregamento, o Fourways avisa e deixa de fora os veículos com modelos indisponíveis. Reative os mods originais antes de carregar um jogo que dependa deles.
Os formatos integrados cobrem o conteúdo descrito aqui. Adicionar tipos de carga, indústrias ou prédios urbanos, ajustar custos individuais de construção, substituir modelos ou sons do jogo ou mudar a interface exige trabalhar no código do jogo.