WENOPAL

Cómo hacer mods de vehículos en Project Zomboid B42

Lo que aprendimos haciendo ChileCars y Wanaco: estructura de un auto, físicas que no se pueden pasar, luces, textos al revés y cómo hacer que aparezcan en el mapa.

Nivel avanzado · Actualizada el

Los vehículos son de los mods más pedidos por la comunidad, sobre todo porque muchos packs de Build 41 nunca se actualizaron. También son de los más complicados. Esta guía junta lo que aprendimos con ChileCars (patrullas de Carabineros, taxi, camión de correo) y Wanaco (el carro lanza-aguas).

Las piezas de un vehículo

PiezaDóndeQué es
Modelo 3Dmedia/models_X/vehicles/La carrocería (una sola malla con un solo mapa UV)
Texturamedia/textures/Vehicles/La pintura, más una máscara para las luces
Script del modelomedia/scripts/model con shader = vehicle
Script del vehículomedia/scripts/vehicles/Físicas, ruedas, puertas, asientos, motor, luces
NombreTranslate/<IDIOMA>/IG_UI.json"IGUI_VehicleName<NombreDelScript>": "Nombre visible"
Aparición en el mapaLuaVehicleZoneDistribution

El error del "vehículo fantasma"

Síntoma: el vehículo aparece, pero solo se ve su sombra.

Causa: en el script del vehículo, el modelo se escribió sin módulo (file = Wanaco_GuanacoActros). Sin módulo, el juego solo lo busca en el módulo Base.

Solución: escribe siempre el módulo: file = Wanaco.Wanaco_GuanacoActros.

Físicas: no te pases

  • Masa (mass): mantenla dentro de los valores vanilla, hasta ~1160. Con 2400 el Wanaco aceleraba el motor pero no se movía.
  • Fuerza del motor (engineForce): hasta ~7000, el máximo vanilla.
  • Ruedas: el juego simula solo 4 ruedas. Si tu camión tiene más ejes, los demás son solo parte del modelo. Todas las ruedas vanilla usan radius = 0.15.
  • Escala: los modelos de vehículos se escalan ×1,82. Ten en cuenta ese factor al posicionar ruedas, puertas y cajas de colisión.

Textos y logos: el juego los muestra al revés

Los vehículos se dibujan espejados de izquierda a derecha respecto a como los ves en Blender o en tu visor. Si pintas "CARABINEROS" en la puerta, en el juego se lee al revés.

Solución: pinta los textos espejados en la textura. Un texto de varias palabras se espeja como bloque completo. Para comprobarlo antes de abrir el juego, voltea horizontalmente tu render de prueba.

Luces

Las luces (focos, stop, balizas) se marcan en una máscara de color aparte: cada zona de la textura se pinta con un color exacto que el shader reconoce. Los colores están en el shader del juego (media/shaders/vehicle.frag). Nosotros los usamos para la baliza de las patrullas.

Que aparezca en el mapa

Así lo hace Wanaco (media/lua/shared/Wanaco_VehicleZones.lua), para que aparezca en las comisarías:

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()

Hay zonas para estacionamientos, calles, policía, bomberos, etc. Para ver todas, busca VehicleZoneDefinition.lua dentro de media/lua/ en la carpeta de instalación del juego.

Un sistema propio (el cañón de agua)

Si tu vehículo hace algo especial, como disparar agua, sigue el patrón de Lua para mods: el jugador pide desde el cliente y el servidor aplica. Guarda el estado en el modData de una parte del vehículo y sincronízalo con vehicle:transmitPartModData(part).