Miles de mods de Build 41 no funcionan en Build 42, y muchos autores los abandonaron. La buena noticia es que la mayoría de los cambios son mecánicos: se arreglan con buscar y reemplazar, si sabes qué buscar. Esta guía junta todo lo que tuvimos que cambiar en nuestros mods, comprobado en los archivos del propio juego (B42.21).
1. La estructura de carpetas
En B41 los archivos iban directo en la carpeta del mod. En B42 van dentro de una carpeta con la versión:
B41 B42
Contents/mods/MiMod/ Contents/mods/MiMod/
├── mod.info ├── 42/
├── poster.png │ ├── mod.info
└── media/ │ ├── poster.png
│ └── media/
└── common/ (opcional)- Mueve
mod.info, las imágenes ymedia/dentro de42/. common/es para archivos que sirven en cualquier versión. No es obligatoria.- En
mod.infoagregaversionMin=42.0.0, o la versión que realmente necesites.
2. Ítems: Type pasa a ItemType
En B42 ningún ítem vanilla usa Type =: todos usan ItemType con prefijo base:.
| B41 | B42 |
|---|---|
Type = Food, | ItemType = base:food, |
Type = Weapon, | ItemType = base:weapon, |
Type = Clothing, | ItemType = base:clothing, |
Type = Normal, | ItemType = base:normal, |
Type = Drainable, | ItemType = base:drainable, |
Los 15 tipos que existen en B42 son: base:normal, base:food, base:weapon, base:clothing, base:drainable, base:container, base:literature, base:moveable, base:radio, base:key, base:map, base:weaponpart, base:alarmclock, base:alarmclockclothing y base:animal. Para ver ejemplos de cada uno, busca un ítem parecido en la referencia de ítems.
3. Tags, BodyLocations y categorías llevan base:
| Qué | B41 | B42 |
|---|---|---|
| Tags | Tags = Hammer, | Tags = base:hammer, |
| Dónde se pone la ropa | BodyLocation = Shoes, | BodyLocation = base:shoes, |
| Categoría de arma | Categories = SmallBlunt, | Categories = base:smallblunt, |
Los valores exactos están en la referencia de tags y la de BodyLocations. Ojo: algunos nombres no son solo "agregar base:" (por ejemplo, hay base:tshirt, base:shortsleeveshirt, base:zeddmg). Cópialos de la referencia.
4. Recetas: recipe pasa a craftRecipe
B42 no tiene ninguna receta con el formato viejo: hay casi mil craftRecipe y cero recipe. El formato es completamente distinto:
craftRecipe MakeCompletoItaliano
{
timedAction = Making,
time = 60,
Tags = InHandCraft;Cooking,
category = Cooking,
inputs
{
item 1 [CompleteItaliano.PanCompleto;Base.BunsHotdog_single] flags[InheritFoodAge],
item 1 tags[base:screwdriver] mode:keep,
}
outputs
{
item 1 CompleteItaliano.CompletoItaliano,
}
}- Las recetas viejas no se convierten solas: hay que reescribirlas. Mira la guía de ítems y recetas.
- Todos los ítems de tu mod van con el módulo adelante (
MiMod.Item). Si falta, el juego no carga la partida ("World loading could not proceed, there are script load errors"). - El nombre visible de la receta va en
Recipes.json(ver el punto 5).
5. Traducciones: solo JSON
B42 solo lee archivos .json. Los .txt de B41 se ignoran sin dar error: en pantalla aparece la clave en vez del texto.
B41: media/lua/shared/Translate/ES/ItemName_ES.txt
ItemName_ES = {
ItemName_MiMod.Sopaipilla = "Sopaipilla",
}
B42: media/lua/shared/Translate/ES/ItemName.json
{
"MiMod.Sopaipilla": "Sopaipilla"
}- Fíjate que la clave cambia: en B42 es
Modulo.Item, sin elItemName_adelante. - Lo mismo para
Tooltip,Recipes,IG_UI,Sandbox: un.jsonpor tipo y por idioma. Detalles en Traducciones.
6. Loot: casi igual, pero revisa los nombres
El sistema sigue siendo ProceduralDistributions con Events.OnPostDistributionMerge, así que el código de loot de B41 suele funcionar. Pero muchas listas cambiaron o quedaron vacías: por ejemplo GunStoreShelf existe pero está marcada como obsoleta y no tiene ítems. Si tu ítem "no aparece", revisa cada nombre en la referencia de listas de loot.
Usa siempre el patrón que revisa que la lista exista, explicado en Loot.
7. Cambios en Lua que rompen mods
| Antes | En B42 |
|---|---|
getProperties():Is(IsoFlagType.water) | getProperties():has(IsoFlagType.water), en minúscula. El juego no usa :Is( en ningún lado. |
getCell():getVehicles():get(i) | getVehicles() ahora es un Set, sin :get(i). Para recorrer objetos usa getCell():getObjectListForLua(). |
HaloTextHelper.addText(player, texto, color) | Usa addGoodText (verde), addBadText (rojo) o addText(player, texto). |
table.insert(PrintMediaDefinitions.Fliers, ...) | Esa tabla ya no existe: los folletos son un registro (Registries.FLIER). |
BodyLocations con texto: getOrCreateLocation("Hat") | El juego usa la enumeración ItemBodyLocation.HAT. Revisa media/lua/shared/NPCs/BodyLocations.lua. |
Timed actions en client/ | Ponlas en shared/: en multijugador B42 el servidor también las crea por nombre. |
El síntoma típico de estos cambios es el error tried to call nil, que aparece al cargar la partida. La lista completa de eventos de B42 está en la referencia de eventos de Lua.
8. Servidores: Mods= lleva barra invertida
Si tu mod se usa en servidores, avisa en la página que en B42 la línea es Mods=\MiMod (con \ delante de cada ID). Más en la guía del servidor dedicado.
Lista de control
- Archivos movidos a
42/yversionMinenmod.info. - Todos los
Type =cambiados aItemType = base:.... - Tags, BodyLocations y categorías con
base:, copiados de la referencia. - Recetas reescritas como
craftRecipe, con ítems del mod con módulo. - Traducciones pasadas a
.json, con las claves nuevas. - Listas de loot revisadas una por una.
- Ningún
:Is(,getVehicles():get(niPrintMediaDefinitions.Fliersen el Lua. - Probado con
-debugen una partida nueva: sin errores enconsole.txt. Ver Errores comunes.