Bug: Crash on warp with Alien Biomes — MultioctaveNoise::octaves must be > 0 in decorative:lava-decal-blue:probability
Mod versions:
Warptorio 3 (no Space Age): 2.5.3
Warptorio 3 Expansion: 2.0.20
Alien Biomes: installed (latest)
Factorio: 2.0
Error message:
Error while running event warptorio3_2::on_tick (ID 0)
Error when running interface function planetorio.SimplePlanetRoll:
An error occured while compiling "decorative:lava-decal-blue:probability" noise expression:
MultioctaveNoise::octaves must be > 0 and can't be infinite
Stack trace:
[C]: in function 'create_surface'
warptorio3_2/warptorio_planet_engine.lua:343: in function 'MakeSurface'
warptorio3_2/warptorio_planet_engine.lua:385: in function 'SimplePlanet'
warptorio3_2/warptorio_planet_engine.lua:516: in function SimplePlanetRoll
What happens: The game crashes every time a warp rolls a specific expansion planet template. Because Factorio's RNG is deterministic, loading a save before the warp reproduces the crash 100% of the time — the same template is always rolled.
Root cause analysis: The base mod (warptorio3_2) already fixed this exact crash pattern in versions 2.4.10–2.5.x. The problem occurs when a planet template pins the cliffiness noise expression to the constant "0" via property_expression_names["cliffiness"] = "0". With Alien Biomes loaded, AB's decorative:lava-decal-blue:probability expression references cliffiness inside a multioctave_noise(octaves=...) call. When cliffiness evaluates to 0, the derived octaves count becomes 0 or infinite, and create_surface crashes.
The base mod's fix was twofold:
A global guard in planets.SetPropertyExpression() (warptorio_planet_modifiers.lua:258–261) that skips writes when the value coerces to numeric zero.
Replacing { "cliffiness", 0 } modifiers with { "cliffs", { name = "cliff", cliff_elevation_0 = 1024, cliff_elevation_interval = 10, richness = 0 } } — achieving "no cliffs" via cliff_settings.richness = 0 instead of pinning the noise expression.
However, the expansion mod (warptorio3_2_expansion v2.0.20) has its own planet templates (e.g. volcanic, frozen, exotic, toxic, etc.) that may still set cliffiness = 0 either directly in their gen.property_expression_names table or via a { "cliffiness", 0 } modifier. Since the gen field bypasses the SetPropertyExpression guard entirely, the crash still triggers for those expansion-defined templates.
Suggested fix: Audit all planet templates in the expansion for any cliffiness = "0" or { "cliffiness", 0 } entries and replace them with the cliff_settings approach:
lua
-- Instead of:
{ "cliffiness", 0 }
-- or:
gen = { property_expression_names = { cliffiness = "0" } }
-- Use:
{ "cliffs", { name = "cliff", cliff_elevation_0 = 1024, cliff_elevation_interval = 10, richness = 0 } }
Workaround: Players can avoid the crash by selecting a specific warp target (e.g. "normal" or "uncharted") from the dropdown instead of "(Random)", which forces a base-mod template that has already been patched.