Referência de mods

Adicione veículos, mude o terreno e as tarifas, traduza o jogo ou escreva suas próprias regras.

Buscar na API de modsConsulte os hooks, os métodos e as opções de arquivos.

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."
    }
  }
}
CampoValor
name, descNome exibido e descrição opcional na loja.
kindrail, road, water ou air.
look ou modelReaproveite 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.
cargosLista com pelo menos um ID de carga existente, como pax, mail, coal, wood, goods e food.
max_wagons ou capLocomotivas exigem max_wagons. Nos demais veículos, cap indica a capacidade.
speedCasas por dia de jogo. Multiplique por 30 para obter a velocidade em km/h exibida na loja.
cost, runPreço de compra e custo anual de operação, em dólares inteiros. Os vagões entram no preço do trem.
yearPrimeiro ano em que aparece na loja. Omita o campo para deixar o veículo disponível desde o início.
relConfiabilidade inicial opcional entre 0 e 1. O valor padrão depende do ano do veículo.
electricUse 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 look usam 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, e days indica por quantos dias vale a tarifa integral. Os dois valores precisam ser positivos. Pressione Y para conferir em Tarifas de carga.
  • town_names combina um prefixo e um sufixo para gerar nomes de cidades. Use replace: true para trocar as listas do jogo pelas suas.
  • company_names fornece 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 %s e %d na mesma ordem. Use \n para 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 English para exibir o nome do idioma em Configurações. Por exemplo, coloque nl: Nederlands abaixo 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çãoQuando 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) → boolAntes 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. Use good, info, warn ou bad em kind. Informe uma casa em at para 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. Use info para consultar metadados como id, name e version.

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 um Array[Vector2i] tipado.
  • sim.build_station(kind, pts, axis, who = null) constrói ou amplia uma estação do tipo road, rail, dock ou air. Passe as casas como um Array[Vector2i] e o eixo da plataforma para estrada ou ferrovia. Em caso de sucesso, o resultado contém station.
  • 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. consist pode substituir a carga e o número de vagões de um trem misto. transfer_at indica os índices das paradas onde a carga fica para outro veículo. Em caso de sucesso, o resultado contém vehicle.
  • sim.town_action(town, action, who = null) executa advertise, trees ou fund e retorna o custo da ação em cost.
  • sim.company.earn(amount) credita dinheiro à empresa do jogador. sim.company.spend(cost, category) registra um gasto e retorna false se a empresa não tiver dinheiro suficiente. Duas categorias possíveis são construction e vehicles.
  • 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 e sim.day_int para 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.