WENOPAL

Curso de modding de Project Zomboid B42

Un curso técnico para entender cómo funciona Project Zomboid B42 por dentro y hacer mods con Lua, scripts, assets y Java.

Módulos

00

Entorno de trabajo

Arma un ciclo rápido para modear Project Zomboid con las carpetas clave, modo debug, logs, VS Code y recarga de Lua sin reiniciar.

01

Anatomía del juego y de un mod

Entiende cómo se reparten Java y media/, cómo se juntan los mods con el juego, el orden de carga del Lua y cómo rastrear cualquier texto o ítem.

02

Scripts: ítems

Escribe ítems de Build 42 sabiendo qué hace cada campo, qué clase Java crea ItemType, cómo usar tags y cómo lee el motor los scripts.

03

Scripts: recetas y entidades (B42)

Escribe recetas craftRecipe de Build 42 compatibles con otros mods, controla cómo se aprenden y crea una estación de trabajo propia.

04

Texturas e íconos

Qué imagen busca el motor para íconos, modelos, ropa e interfaz, con qué nombre y formato, y cómo hacer variantes sin código.

05

Modelos 3D

Qué hace el motor con un modelo, cómo escribir los model del script, poner un objeto en la mano y en el suelo, y armar una prenda que se vea bien puesta.

06

Lua en Project Zomboid (Kahlua)

Qué dialecto de Lua usa Project Zomboid, qué le falta, y cómo organizar un mod con namespace, clases, eventos y archivos.

07

La frontera Lua ↔ Java

Cómo llega un objeto Java a Lua, qué puedes hacer con él y cómo averiguar la API real del motor con javap, sin depender de wikis.

08

Leer el código de Java

Cómo abrir projectzomboid.jar con búsqueda de cadenas, javap y un decompilador para saber qué hace realmente el juego.

08b

Bytecode a fondo: qué sacar de él y para qué

Usar el bytecode del juego como fuente de datos: valores por defecto, quién llama a quién, qué eventos se disparan de verdad y qué cambió entre versiones.

09

Sobrescribir comportamiento

Cambiar lo que hace el juego sin copiar sus archivos: envolver funciones de Lua, usar los ganchos Hook y elegir la herramienta según dónde vive cada cosa.

10

Menús contextuales e interfaz

Agregar opciones al clic derecho sin pelear con otros mods y construir ventanas propias entendiendo cómo se conecta Lua con la interfaz de Java.

11

Timed actions

Cómo escribir acciones con barra de progreso que se animen, se cancelen bien, se encolen sin trabarse y funcionen en el multijugador de Build 42.

12

Multijugador

En qué máquina corre cada línea de un mod, cómo mover datos entre cliente y servidor sin abrir agujeros y cómo probarlo con dos jugadores.

13

Loot, sandbox y traducciones

Cómo poner ítems en el mundo con una probabilidad calculada, hacerla ajustable con opciones de sandbox y traducir todo el texto del mod.

14

Datos persistentes y rendimiento

Dónde guardar datos que sobrevivan a cerrar el juego, qué cuesta cada llamada en Kahlua y cómo escribir código frecuente sin bajar los FPS.

15

Depuración en serio

Cómo encontrar la causa de un bug en PZ con método: dónde está el log, cómo leer los errores de Kahlua y cómo aislar el problema.

16

Casos reales

Seis bugs reales de nuestros mods, con síntoma, pistas falsas, causa y lección, para practicar el método de depuración.

17

Publicar y mantener

Publicar un mod en el Workshop entendiendo cada archivo, y mantenerlo cuando el juego se actualiza: versiones, dependencias y migración de datos.

Un curso técnico para aprender modding en serio: no es para copiar recetas. La idea es entender cómo funciona el juego por dentro y poder averiguar solo lo que ninguna guía explica.

Para quién: alguien que ya programa. No se explica qué es una variable o un for. Sí se explica todo lo propio de Project Zomboid: el motor, Kahlua, la frontera Lua ↔ Java, los formatos de los assets y cómo leer el código del juego.

Cómo se usa: cada módulo tiene teoría corta, un recorrido por los archivos reales del juego, ejercicios con criterio de "listo" y un desafío. Todo lo que construyes va a un solo mod de práctica, CursoLab, que crece módulo a módulo y que puedes cargar en el juego en cualquier momento.

Antes de empezar

Temario

Parte 1: fundamentos

#MóduloQué aprendesEjercicio central
00Entorno de trabajoCarpetas, modo debug, consola, console.txt, VS Code con tipos de PZ, ciclo editar → recargarCursoLab carga y escribe en la consola
01Anatomía del juego y de un modmedia/, módulos, cómo el juego junta los archivos de los mods, orden de carga, 42/ y common/Encontrar en el juego de dónde sale un ítem, una receta y un texto
02Scripts: ítemsSintaxis de los .txt, module/imports, tipos de ítem, campos, tags, cómo el juego los parseaTres ítems nuevos (comida, herramienta, arma)
03Scripts: recetas y entidades B42craftRecipe, inputs/outputs, mode:keep, tags, itemMapper, entity y estacionesRecetas que usan tags y una estación propia
04Texturas e íconosFormatos, tamaños, nombres que busca el motor, .pack vs sueltos, UI y overlaysÍconos y una textura propia para los ítems
05Modelos 3DBlender → FBX/X, escala y ejes, model scripts, attachment, ropa (clothing.xml, fileGuidTable)Un objeto en la mano y una prenda

Parte 2: Lua y el motor

#MóduloQué aprendesEjercicio central
06Lua en PZ (Kahlua)Lua 5.1 sobre la JVM: diferencias, require, globales, client/server/shared, eventosSistema propio que reacciona a eventos
07La frontera Lua ↔ JavaCómo Java expone clases y funciones a Lua (LuaManager, Exposer), objetos Java desde Lua, instanceof, métodos que no existenInspeccionar objetos vivos del juego desde la consola
08Leer el código de JavaSacar el .jar, decompilar (CFR/Vineflower), javap y bytecode, buscar comportamiento realDescubrir cómo calcula el juego el loot y comprobarlo
08bBytecode a fondoAnatomía de un .class, qué sacar del bytecode (valores por defecto, quién llama a quién, eventos que nunca se disparan, permisos de red, cambios entre versiones), la herramienta pzxref, qué gana un mod (bugs silenciosos, números exactos, actualizaciones, multijugador)Encontrar un evento registrado que el juego nunca dispara y comprobarlo
09Sobrescribir comportamientoParchear funciones Lua del juego sin romperlas (hook/wrap), límites de lo que se puede cambiar desde LuaCambiar una acción del juego de forma compatible

Parte 3: sistemas del juego

#MóduloQué aprendesEjercicio central
10Menús contextuales e interfazISContextMenu, ISPanel, ISUIElement, ventanas, fuentes y escaladoMenú contextual y una ventana propia
11Timed actionsISBaseTimedAction: ciclo de vida, animaciones, cola, cancelarUna acción con barra de progreso
12MultijugadorQué corre dónde, sendClientCommand/sendServerCommand, ModData, sincronizar sin trampasUna función de CursoLab que funcione en un servidor
13Loot, sandbox y traduccionesDistribuciones, OnPostDistributionMerge, opciones de sandbox, JSON de traducciónLoot configurable desde sandbox
14Datos persistentes y rendimientoModData global y de objetos, OnTick vs eventos, perfilar, evitar lagMedir y optimizar un sistema

Parte 4: depurar y publicar

#MóduloQué aprendesEjercicio central
15Depuración en serioLeer stack traces de Kahlua, debugger de Lua, recarga en caliente, aislar bugs, bisectar modsArreglar bugs plantados en una copia de CursoLab
16Casos realesBugs que aparecieron en los mods de Wenopal (ropa, vehículos, MP) y cómo se resolvieronReproducir y explicar dos de ellos
17Publicar y mantenerWorkshop, versiones, compatibilidad entre parches, migraciones B41 → B42Publicar CursoLab como mod oculto

Proyecto final

Un mod completo de tu elección que use lo de todo el curso. La lista de requisitos está al final del módulo 17.