La pantalla de Sandbox personalizado parece dos sistemas de dificultad atornillados el uno al otro. Por un lado, desplegables amables: Número de zombis, Intervalo de reaparición de zombis, Velocidad de la erosión. Por el otro, un panel avanzado lleno de decimales que nadie explica. No son dos sistemas. Los desplegables son atajos de solo escritura que estampan números en los campos avanzados y, una vez lo han hecho, el juego no vuelve a mirarlos nunca. Cada decisión de dificultad que tomas en Project Zomboid es una decisión sobre treinta y tantos números, y el desplegable no es más que un marcador que alguien dejó junto a un puñado de ellos.
Eso importa más en Build 42 que antes, porque Build 42 rebajó la escala que hay debajo. El «Normal» del desplegable Número de zombis era 1.0 en Build 41 y ahora es 0.65: todos los niveles bajaron entre un 35 % y un 57 %. Una receta de sandbox copiada de una guía de Build 41 no produce un mundo ligeramente distinto. Produce el mundo equivocado.
Los desplegables escriben, no son ajustes
Abre el código de la propia pantalla de sandbox y la relación cabe en una docena de líneas sin una sola lectura dentro. Cuatro controles tienen efectos secundarios; en ningún sitio hay nada que le pregunte a un desplegable qué dice.
Elegir un Número de zombis escribe ZombieConfig.PopulationMultiplier a partir de una tabla de seis entradas. Elegir un Intervalo de reaparición de zombis escribe tres campos a la vez —RespawnHours, RespawnUnseenHours y RespawnMultiplier— desde tres tablas paralelas. Marcar Migración de zombis pone RedistributeHours en 12.0; desmarcarlo lo pone en 0.0. Y el simple hecho de confirmar la pantalla vuelve a sortear WaterShutModifier y ElecShutModifier, que es el más desagradable de los cuatro y tiene su propia sección más abajo.
Conviene tener delante la tabla de reaparición, porque en un archivo .lua ves el número entero, nunca la etiqueta:
Valor de ZombieRespawn |
RespawnHours | RespawnUnseenHours | RespawnMultiplier |
|---|---|---|---|
| 1 | 16.0 | 6.0 | 0.5 |
| 2 (valor por defecto del motor) | 72.0 | 16.0 | 0.1 |
| 3 | 216.0 | 48.0 | 0.05 |
| 4 | 0.0 | 0.0 | 0.0 |
De ahí salen tres consecuencias, y las tres duelen.
El orden importa. Primero el desplegable, después la edición a mano de los campos avanzados. Al revés, destruyes tu trabajo en cuanto rozas el desplegable.
En un archivo, el desplegable es decoración. Si editas servertest_SandboxVars.lua directamente, el motor lee ZombieConfig.RespawnHours; la clave ZombieRespawn que está cerca del principio de ese mismo archivo no hace nada al cargar. Uno de los presets que vienen con el juego ya se contradice a sí mismo justo en este punto: Rising declara ZombieRespawn = 3, cuya fila de la tabla son 216 horas, mientras que su propio RespawnHours es 72.0. El mundo corre a 72.
Reabrir la pantalla de ajustes es destructivo. Un administrador que afina a mano el archivo Lua y más tarde abre la pantalla de alojar partida (Host → Manage Settings) para cambiar cualquier otra cosa puede borrar ese trabajo con solo rozar un control de paso.
«Normal» ya no es 1.0
La tabla de seis entradas que hay detrás de Número de zombis es el caso más claro de suelo movedizo:
| Número de zombis | Build 42 | Build 41 |
|---|---|---|
| Zombicidio | 2.5 | 4.0 |
| Muy alto | 1.6 | 3.0 |
| Alto | 1.2 | 2.0 |
| Normal | 0.65 | 1.0 |
| Bajo | 0.15 | 0.35 |
| Nada | 0.0 | 0.0 |
El Alto de Build 42 está un quinto por encima de lo que Build 41 llamaba Normal. El Bajo de Build 42 no llega ni a la mitad del Bajo antiguo. Así que si hoy escribes 1.0 en PopulationMultiplier porque es la cifra que una guía de Build 41 llamaba neutra, has dejado el mundo un 54 % más denso que el preset Apocalypse, y leerás el resultado como que el juego se ha vuelto más difícil, en lugar de como tu propia aritmética.
El multiplicador es un techo, no una constante. PopulationStartMultiplier lo escala el día uno, PopulationPeakMultiplier lo escala el día del pico y PopulationPeakDay dice cuándo es ese día. Apocalypse va con 0.65 de base, ×1.0 al principio y ×1.5 al llegar al día 28, y por eso el segundo mes se siente como un juego distinto del primero. Los tres multiplicadores admiten de 0.0 a 4.0; el día del pico admite de 1 a 365.
Otros dos ajustes deciden dónde están esos zombis en lugar de cuántos hay. Distribution elige entre Enfoque urbano y Uniforme, y ZombieVoronoiNoise —nuevo en Build 42 y activado por defecto— los agrupa en vez de repartirlos de forma pareja. Ninguno cambia tu total, y los dos cambian si la carretera entre dos pueblos está vacía o es mortal. Uniforme en particular arruina en silencio una partida de población baja: se lleva lo que falta de las ciudades a los campos que pensabas cultivar.
La reaparición y la migración son dos relojes distintos
El preset Apocalypse toma aquí una decisión poco habitual que hereda todo lo que se deriva de él. RespawnHours, RespawnUnseenHours y RespawnMultiplier valen 0.0 —la reaparición está totalmente desactivada— mientras que RedistributeHours se queda en 12.0, así que la migración está activa.
Por eso un pueblo limpiado nunca recibe zombis nuevos. Lo que sí ocurre es que se rellena con los que ya estaban en la misma celda, cada doce horas, colándose en el hueco que acabas de abrir. El ajuste que lo detiene es RedistributeHours, y el valor es 0.0. Ir a tocar los controles de reaparición no puede funcionar, porque en Apocalypse ya están a cero.
Dentro de la propia reaparición hay dos unidades distintas en juego. El ciclo se evalúa por celda, mientras que RespawnUnseenHours es una barrera aparte que se aplica por chunk: el área pequeña tiene que pasar sin ser observada antes de que aparezca nada en ella. RespawnMultiplier es la fracción de la población objetivo de una celda que se permite recuperar por ciclo, y es el número más determinante de toda la pantalla para una partida larga. Con la pareja por defecto de 72 horas y 0.1, una celda que vaciaste del todo vuelve a su objetivo en diez ciclos: treinta días de juego. Deja el intervalo como está, sube el multiplicador a 0.5 y son seis días. Ninguno de los dos valores cambia absolutamente nada de tu primera semana, que es justo por lo que se configura a la ligera y luego decide cómo será el tercer mes.
Un número vecino merece la misma atención. FollowSoundDistance (de 10 a 1000, 100 por defecto) es la distancia que camina un zombi hacia lo último que oyó, y Extinction la dobla hasta 200. Súbela y cada disparo recluta desde el doble de radio; combina eso con la reaparición activada y el ruido deja de ser un coste puntual, porque la multitud que atrajiste se repone por temporizador.
El botín dejó de ser una palabra de rareza
Build 41 le daba a cada categoría de botín un desplegable de siete pasos, de Increíblemente raro a Abundante. Build 42 lo sustituyó por diecinueve multiplicadores decimales —FoodLootNew, MedicalLootNew, ToolLootNew, MaterialLootNew, FarmingLootNew y los demás—, cada uno con un rango de 0.0 a 4.0 y un valor por defecto de 0.6.
Las viejas palabras de rareza sobreviven como seis factores que puedes editar directamente:
| Rareza | Clave | Valor |
|---|---|---|
| Increíblemente raro | InsaneLootFactor |
0.05 |
| Extremadamente raro | ExtremeLootFactor |
0.2 |
| Raro | RareLootFactor |
0.6 |
| Normal | NormalLootFactor |
1.0 |
| Común | CommonLootFactor |
2.0 |
| Abundante | AbundantLootFactor |
3.0 |
El 0.6 que Apocalypse aplica a casi todas las categorías es el factor Raro, escrito como número. Lo interesante son sus excepciones: RangedWeaponLootNew está en 1.2, el doble que todo lo demás; FoodLootNew y OtherLootNew se quedan en 0.8; KeyLootNew baja a 0.4.
Subir esos multiplicadores es donde se rompen las expectativas, porque Build 42 añadió debajo una segunda capa que funciona con reloj. MaximumLooted es el porcentaje de probabilidad de que un contenedor ya lo haya vaciado otra persona, subiendo de forma lineal desde el día cero hasta DaysUntilMaximumLooted. Apocalypse pone 25 y 90, así que para el día noventa una cuarta parte de los contenedores está desvalijada por generosos que sean tus multiplicadores. El valor por defecto del motor es 50; Extinction usa 50 repartido en 60 días.
Tres modificadores alimentan esa misma cifra. RuralLooted (0.5 en Apocalypse) escala la probabilidad en las casillas que quedan fuera de una región definida: el campo. Las casillas cuyo tipo de densidad de zombis es Rich reciben además un 1.5× fijo, así que los barrios acomodados son los primeros en quedar rebuscados. Y TimeSinceApo, el desplegable Meses desde el apocalipsis, suma treinta días por mes directamente al reloj: empezar con seis meses son 180 días, por encima del techo de 90 días de Apocalypse, así que el mundo llega a su máximo de saqueo en tu primera mañana.
Otra pareja aparte adelgaza lo que queda dentro de los contenedores que nadie tocó: MaximumDiminishedLoot junto con DaysUntilMaximumDiminishedLoot, aplicados como un multiplicador 1 − porcentaje sobre la cantidad. Apocalypse pone 20 repartido en 3650 días, tan lento que es casi teórico. Extinction lo deja en 0, lo apaga, y se apoya por completo en la probabilidad de saqueo previo.
La conclusión práctica: subir solo FoodLootNew es echarle un pulso a una rampa. Baja MaximumLooted en la misma pasada y recuerda que en Apocalypse nunca se rellena nada: HoursForLootRespawn está en 0, con MaxItemsForLootRespawn en 5 y ConstructionPreventsLootRespawn activado.
Cada temporizador del mundo tiene un segundo campo que manda sobre él
El agua y la electricidad parecen simétricas en pantalla y no lo son en el código. Los dos desplegables sortean un día dentro de una ventana, pero la tirada de la electricidad lleva un suelo duro que la del agua no tiene.
| Opción | El agua se corta el día | La electricidad se corta el día |
|---|---|---|
| Instantáneo | ya está cortada | ya está cortada |
| 0-30 días | 0-30 | 14-30 |
| 0-2 meses | 0-60 | 14-60 |
| 0-6 meses | 0-180 | 14-180 |
| 0-1 año | 0-360 | 14-360 |
| 0-5 años | 0-1800 | 14-1800 |
| 2-6 meses | 60-180 | 60-180 |
| 6-12 meses | 180-360 | 180-360 |
Apocalypse pone las dos en la opción 0-30 días, así que tus grifos pueden fallar el día uno y tu nevera no puede fallar antes del día catorce. Planifica las dos primeras semanas alrededor de recipientes de agua, no alrededor de un generador.
El resultado de la tirada acaba en WaterShutModifier y ElecShutModifier, y es ese entero guardado el que lee el motor: hay corriente mientras la edad del mundo en días sea menor o igual que ElecShutModifier, así que un valor de 14 significa que la red aguanta todo el día 14 y muere el 15. Este es además el campo con el que la pantalla de sandbox es más agresiva. Elegir un preset solo vuelve a sortear el modificador si sigue en su valor por defecto de 14, que es como Six Months Later conserva su -1 puesto a mano. Confirmar la pantalla de Sandbox personalizado vuelve a sortear los dos sin condiciones: sin comprobación y sin excepción. Un día de corte que hayas escrito en el panel avanzado no sobrevive al botón que lo guarda. Escrito en un archivo _SandboxVars.lua y cargado por un servidor que nunca abre esa pantalla, aguanta.
La erosión sigue la misma forma con una anulación más limpia. ErosionSpeed va de 1 a 5 para 20, 50, 100, 200 y 500 días hasta la vegetación completa. El valor por defecto del motor es 3 —Normal (100 días)—, pero Apocalypse trae 4, así que el mundo canónico se cubre de maleza a la mitad de ese ritmo. ErosionDays manda sobre él sin más: -1 desactiva la erosión de forma permanente, 0 cede a ErosionSpeed y cualquier otro valor es un número literal de días hasta 36 500.
Tres presets, escritos como los lee el motor
Primero los desplegables, después estas claves. Son fragmentos, así que todo lo que no nombran conserva el valor que ya tuviera; por eso Homestead deja escrito PopulationPeakMultiplier = 1.0 en lugar de no tocar la curva. Si lo omites, heredas el 1.5 del motor y la población plana sobre la que se construye el preset crece en silencio la mitad. Quien aloje una partida multijugador puede pegarlos en <servername>_SandboxVars.lua con el servidor parado; en solitario se introducen los equivalentes en el panel avanzado, con una excepción. WaterShutModifier y ElecShutModifier no se pueden fijar desde ese panel, porque confirmarlo vuelve a sortearlos. Si quieres una fecha fija de corte de suministros en un jugador, edita el archivo de sandbox de la partida guardada después de crear el mundo.
Slow Burn. Una partida larga en solitario en la que el mundo empeora en vez de limitarse a llenarse de gente. El día uno tienes la mitad de la densidad de Apocalypse y el pico queda muy por encima, y llega a los cuatro meses, cuando ya tienes una base que merece la pena defender. Eso es un vaivén de cinco veces entre el inicio y el pico, y nada de ello toca el multiplicador base: el nivel se queda en Normal, así que cualquiera que lea tus ajustes ve una partida normal.
Zombies = 4,
ErosionSpeed = 3,
MaximumLooted = 25,
DaysUntilMaximumLooted = 90,
ZombieConfig = {
PopulationMultiplier = 0.65,
PopulationStartMultiplier = 0.5,
PopulationPeakMultiplier = 2.5,
PopulationPeakDay = 120,
RespawnHours = 0.0,
RespawnUnseenHours = 0.0,
RespawnMultiplier = 0.0,
RedistributeHours = 12.0,
},
No Safe Towns. Para grupos que limpian edificios más rápido de lo que puede un jugador solo. La reaparición va a la cadencia por defecto, así que una celda vaciada vuelve a su objetivo en unos treinta días de juego, y la rampa de saqueo previo llega a su tope en sesenta en vez de en noventa. La línea de FollowSoundDistance es la que cambia cómo juegas, no cómo se ve el mundo: a 200, un arma de fuego recluta desde el doble del radio habitual y, con la reaparición activada, la multitud que atrae se repone en lugar de gastarse.
Zombies = 3,
MaximumLooted = 50,
DaysUntilMaximumLooted = 60,
ZombieConfig = {
PopulationMultiplier = 1.2,
PopulationStartMultiplier = 1.0,
PopulationPeakMultiplier = 1.5,
PopulationPeakDay = 28,
RespawnHours = 72.0,
RespawnUnseenHours = 16.0,
RespawnMultiplier = 0.1,
RedistributeHours = 12.0,
FollowSoundDistance = 200,
},
Homestead. Para construir, cultivar y forjar en vez de combatir. RedistributeHours = 0.0 es el que hace el trabajo pesado: sin él, un perímetro limpiado se rellena desde dentro de su propia celda dos veces al día y el preset entero se siente roto. Distribution = 1 importa casi lo mismo: cambiar a Uniforme cogería la población que acabas de recortar y la repartiría de forma pareja por el campo en el que piensas vivir. ErosionSpeed = 2 es la única elección estética que hay aquí, y se gana su sitio: a cincuenta días las carreteras se cierran lo bastante rápido como para que una granja de la que nunca sales cambie visiblemente a tu alrededor.
Zombies = 5,
Distribution = 1,
MaterialLootNew = 2.0,
ToolLootNew = 2.0,
FarmingLootNew = 2.0,
MaximumLooted = 0,
ErosionSpeed = 2,
ZombieConfig = {
PopulationMultiplier = 0.15,
PopulationStartMultiplier = 1.0,
PopulationPeakMultiplier = 1.0,
RespawnHours = 0.0,
RespawnUnseenHours = 0.0,
RespawnMultiplier = 0.0,
RedistributeHours = 0.0,
},
Una sola regla vale para los tres: constrúyelos sobre un archivo de Build 42, nunca sobre uno de Build 41. Los presets de Build 42 llevan Version = 6, y ese número no es decoración: el cargador actualiza nombres y valores de opciones tomándolo como referencia. El único preset heredado que sigue viniendo en la carpeta del juego lo demuestra: Six Months Later lleva VERSION = 5 y todo su bloque de botín está comentado, porque las claves que usaba ya no existen.
