WENOPAL

Como fazer mods de veículos em Project Zomboid B42

O que aprendemos fazendo ChileCars e Wanaco: estrutura de um carro, físicas que não dá para exagerar, luzes, textos espelhados e como fazer eles aparecerem no mapa.

Nível avançado · Atualizado em

Veículos estão entre os mods mais pedidos pela comunidade, principalmente porque muitos packs da Build 41 nunca foram atualizados. Também estão entre os mais complicados. Este guia junta o que aprendemos com ChileCars (viaturas dos Carabineros, a polícia chilena, táxi, caminhão dos correios) e Wanaco (o caminhão lança-água, que no Chile chamam de guanaco).

As peças de um veículo

PeçaOndeO que é
Modelo 3Dmedia/models_X/vehicles/A carroceria (uma única malha com um único mapa UV)
Texturamedia/textures/Vehicles/A pintura, mais uma máscara para as luzes
Script do modelomedia/scripts/model com shader = vehicle
Script do veículomedia/scripts/vehicles/Físicas, rodas, portas, assentos, motor, luzes
NomeTranslate/<IDIOMA>/IG_UI.json"IGUI_VehicleName<NombreDelScript>": "Nombre visible"
Aparição no mapaLuaVehicleZoneDistribution

O erro do "veículo fantasma"

Sintoma: o veículo aparece, mas só dá para ver a sombra dele.

Causa: no script do veículo, o modelo foi escrito sem módulo (file = Wanaco_GuanacoActros). Sem módulo, o jogo só procura no módulo Base.

Solução: escreva sempre o módulo: file = Wanaco.Wanaco_GuanacoActros.

Físicas: não exagere

  • Massa (mass): mantenha dentro dos valores vanilla, até ~1160. Com 2400 o Wanaco acelerava o motor mas não saía do lugar.
  • Força do motor (engineForce): até ~7000, o máximo vanilla.
  • Rodas: o jogo simula só 4 rodas. Se o seu caminhão tem mais eixos, os outros são só parte do modelo. Todas as rodas vanilla usam radius = 0.15.
  • Escala: os modelos de veículos são escalados em ×1,82. Leve esse fator em conta ao posicionar rodas, portas e caixas de colisão.

Textos e logos: o jogo mostra eles espelhados

Os veículos são desenhados espelhados da esquerda para a direita em relação a como você vê no Blender ou no seu visualizador. Se você pintar "CARABINEROS" na porta, no jogo vai aparecer ao contrário.

Solução: pinte os textos espelhados na textura. Um texto de várias palavras é espelhado como um bloco inteiro. Para conferir antes de abrir o jogo, inverta horizontalmente o seu render de teste.

Luzes

As luzes (faróis, luz de freio, giroflex) são marcadas numa máscara de cor separada: cada área da textura é pintada com uma cor exata que o shader reconhece. As cores estão no shader do jogo (media/shaders/vehicle.frag). Nós usamos isso para o giroflex das viaturas.

Fazer ele aparecer no mapa

É assim que o Wanaco faz (media/lua/shared/Wanaco_VehicleZones.lua), para aparecer nas delegacias:

lua
require "VehicleZoneDefinition"

local function agregarGuanacos()
    local police = VehicleZoneDistribution and VehicleZoneDistribution.police
    if not police or not police.vehicles then
        print("[Wanaco] VehicleZoneDistribution.police no disponible")
        return
    end
    police.vehicles["Wanaco.GuanacoActros"] = { index = 0, spawnChance = 40 }
    police.vehicles["Wanaco.Guanaco8x8"] = { index = 0, spawnChance = 25 }
end

agregarGuanacos()

Existem zonas para estacionamentos, ruas, polícia, bombeiros etc. Para ver todas, procure VehicleZoneDefinition.lua dentro de media/lua/ na pasta de instalação do jogo.

Um sistema próprio (o canhão de água)

Se o seu veículo faz algo especial, como disparar água, siga o padrão de Lua para mods: o jogador pede pelo cliente e o servidor aplica. Guarde o estado no modData de uma peça do veículo e sincronize com vehicle:transmitPartModData(part).