This mod is an expansion for Warptorio 3 (No Space Age). More resources, enemies and challenges. Fight alongside a loyal robotic companion. DON'T PANIC!
Scenarios, maps, and puzzles.
Version: 2.0.20
Date: 09.05.2026
Bugfixes:
- Critical mod-load error introduced in 2.0.15 and shipped through
2.0.19: the `wpe-mixed-ore-coarse` / `wpe-mixed-ore-fine`
noise-expression prototypes registered in data.lua used a Lua
node-tree as the `expression` field (`{type="function-application",
function_name=..., arguments={x=..., y=...}}` with `type="variable"`
/ `type="literal-number"` leaves). Factorio 2.0's prototype loader
rejects this with "Unsupported noise expression value type in
property tree at ROOT.noise-expression.wpe-mixed-ore-coarse.
expression". The 2.0.15 changelog claimed the node-tree was the
"pure 2.0 table form (no string-DSL syntax to get wrong)", but
that node-tree was the 1.x lualib's *internal* representation —
`require('noise')` always stringified it before serialization.
No node-tree property-tree form is accepted at the prototype
level in 2.0; `expression` must be a number or a string in the
noise DSL.
Reverted both prototypes (data.lua) and the corresponding
`surface.calculate_tile_properties` sampling + 1.x noise-shaping
math in planets_hot.lua's MixedOres back to the 2.0.13 baseline:
per-tile uniform-random replacement (50%) within the mining-fluid
peer group. compute_resource_peers no longer mutates the surface's
property_expression_names. Mining-fluid peer grouping itself
(the modded-ore-aware part) is unchanged. Visual: organic
stripe pattern is again unavailable; mosaic is uniform-random as
it was through 2.0.14. CLAUDE.md's existing "drops noise
expressions and falls back to per-tile random" guidance is
restored to accuracy and remains in force: do not re-add
`require('noise')`, and do not re-attempt the node-tree form.
A future fix to restore the patterned visual would have to use
string-DSL syntax in the `expression` field and be verified by
an in-game launch before being shipped.
Version: 2.0.19
Date: 08.05.2026
Changes:
- Final cleanup pass — removed dead commented-out code across the
codebase to leave a clean baseline for further development. No
behavior change. Touched files (with summary of removals):
* control.lua: dead require ('Position'), dead alternative
getshipsurfaces declaration, dead inline ..math.random suffix
on planet image fallback, dead error+if-block for the long-
disabled "limited map size" warning, dead remote.call
alternatives in on_init, dead 1.x steel-processing recipe-
enable block, dead update_frame_marvin call, dead --[[
ability_used ]] block, stray dead --table.insert(...marvin2,
'warptorio-accelerator'), three dead --game.print debug calls,
dead falling_lab + msi-projectile-shadow + camera lines.
* data-updates.lua: dead --data.raw.technology["radar"].enabled
line, dead --logistic-science-pack line, dead --optics
prerequisite, dead --terminal.chargable_graphics single-line
fragment, two dead --table.insert(...charge/discharge) lines,
full --[[ disable_productivity ... ]] block (5+ lines),
dead --table.insert(...steel-processing) line.
* utils.lua: three dead --game.print debug calls in
FindUnchartedChunk.
* marvin.lua: dead "table-of-contents" --setup_marvin_globals()
and --on_gui_click(event) at file top, six dead --storage.
marvin_info.X placeholder lines in setup_marvin_globals,
dead --storage.marvin_info.maintenance line at line ~408.
* planets_exotic.lua: dead --resource_named stone=1 entry in
toxic modifiers, dead --shallow_water=shallow_water entry in
exotic_planets table.
* planets_cold.lua: removed empty doc-only --[[ "Surface Map
Generation calls" ]] block (4 lines of vague pseudo-doc that
described nothing concrete).
* prototypes/entities.lua: four dead --localised_name /
--localised_description lines, dead --minable on
wpe_charge_generator.
* prototypes/technology.lua: 8 instances of repeated --order
= "a" placeholder, 1 dead --unit = data.raw.technology[
'warptorio-reactor-5'].unit alternative.
* prototypes/modules.lua: dead --productivity placeholder,
four dead --limitation / --limitation_message_key lines.
* prototypes/projectiles.lua: dead --stream_light /
--ground_light pair, dead --particle_fade_out_threshold.
* prototypes/robot.lua: dead --scale = 0.5 in spider_droid
minimap_representation.
* prototypes/msi_spawner_animations.lua: four dead --scale =
0.5 lines (one per layer in idle/die animations).
Excluded from cleanup: data/tf_util/* (vendored 3rd-party utility
library, kept upstream-pristine for future re-vendoring).
Total: ~50 lines removed across 12 files.
Version: 2.0.18
Date: 08.05.2026
Bugfixes:
- compute_resource_peers in planets_hot.lua now also considers
autoplace controls registered in `prototypes.autoplace_control`
that aren't explicitly listed in the surface's gen table. This
recovers the "default-enabled" semantics that 1.x had via
`game.default_map_gen_settings.autoplace_controls` (removed in
Factorio 2.0). Without this, modded ores whose autoplace control
was registered at data stage but never put into a planet template
via the `resource_named` modifier would be silently excluded from
mixed-ore peer grouping on hot_mixed_ores. Surface gen-table
overrides still take precedence (an explicit frequency=0 still
disables).
Changes:
- planets_exotic.lua: renamed the toxic *gen table* local from
`toxic` to `toxic_gen` so the planet-wrapper local declared just
below (which is also `local toxic`) no longer shadows it. The
`gen = toxic_gen` reference in the wrapper is unambiguous.
Functionally identical (the shadow only manifested AFTER the
wrapper's constructor ran, by which point `gen` had already been
assigned the gen table); the rename is fragility removal.
- data-final-fixes.lua: corrected the comment on the
`_is_recipe_unlockable_cache` declaration. The previous comment
claimed "we don't add new tech-unlocks below"; in fact the AAI
Industry block does insert an `unlock-recipe` effect on the
`laboratory` technology. The cache remains safe in the current
structure because the only `is_product_unlockable` invocation
happens before the AAI block, but the comment was misleading
and made the safety guarantee fragile to future additions.
Comment now accurately describes the safety condition.
Version: 2.0.17
Date: 08.05.2026
Bugfixes:
- get_available_items / get_unlockable_products in utils.lua now
detect variable-amount recipes (those exposing `amount_min` /
`amount_max` instead of a fixed `amount`, common in Bob's, Angel's,
and other modded recipes). Previously the `(product.amount or 0) *
(product.probability or 0) > 0` test always failed for such
products and Marvin's harvest/science availability lists silently
excluded them. Now uses `(product.amount or product.amount_max
or 0) * (product.probability or 1)`. Also corrected probability's
default from 0 to 1 (runtime probability is always normalized to
a number, but defaulting to 1 is the right semantic).
Changes:
- Broken-lab repair recipe now scales down combinator quantities
when substituting for unlockable wires. Previously the fallback
path (`add_recipe('constant-combinator')` etc.) used the same
random 100-300 quantity as the wire it replaced, so a lab needing
~250 red-wires would also need ~250 constant-combinators in mod
setups without electronic-circuit-line wires. Now divides by the
combinator's wire-equivalent (constant 2.5x, arithmetic 5x,
decider 5x), matching the divisors already used by data-final-
fixes.lua's red-wire->constant-combinator substitution.
- Lab-explode handler now also spills the burnt-fuel residue
inventory (`defines.inventory.burnt_result`), not just the main
input and fuel inventories. Mostly relevant under AAI Industry
with uranium-fuel-cell -> depleted-uranium-fuel-cell, where the
depleted cell is a real reusable item that was previously lost
when the lab self-destructed on tech-unlock.
- is_recipe_unlockable in data-final-fixes.lua now memoizes its
result. is_product_unlockable can call it hundreds of times in a
single query (one per recipe in data.raw.recipe), and each call
previously did an O(technologies x effects) scan. Cache is local
to a single data-final-fixes execution; safe because we don't
mutate data.raw.technology after this point.
- planets_init.lua now also tries `remote.call('planet',
'RemoveTemplate', ...)` on the `stone` and `uranium` planet
templates when their corresponding autoplace controls are absent
(pY raw-coal substitution, certain Angel's setups). Previously
`delete_resource` stripped the resource modifier but the empty
template still sat in the planet rotation as a duplicate of
`normal`. Guarded by `remote.interfaces['planet']['RemoveTemplate']`
existence check, so absence of the API in the base mod is a
no-op (preserves the prior 2.0.16 behavior).
Version: 2.0.16
Date: 08.05.2026
Changes:
- Removed all stale `-- TODO:` comments from the codebase. Every one
was either: balance tuning that survived the 1.x->2.0 port without
anyone needing it (combinator divisors in lab-repair fallback path
at control.lua:2147-2149), an open question never answered (spill
burnt-fuel inventory on lab-explode), a micro-perf opportunity
that doesn't matter (precompute is_recipe_unlockable cache),
blocked on an upstream API that may not exist (RemoveTemplate for
empty stone/uranium templates), or a known limitation the 1.x
author flagged but didn't fix in 1.x either (Angel's hidden
recipes, variable-amount product detection in Marvin's lists).
None affect mod load or core gameplay; their `TODO` framing
implied future work that never came. Removed for code cleanliness.
No behavior change.
Version: 2.0.15
Date: 08.05.2026
Bugfixes:
- Toxic biters now actually spawn on the toxic planet under Alien
Biomes. The 1.x intent was "toxic biters everywhere on the toxic
surface", relying on the gen table's `{ "aux", value }` constant
pin to push aux noise above Toxic_biters' 0.65 spawn gate. AB 2.0
overrides the vanilla aux noise expression and reads only the
`control-setting:aux:bias` property -- the 1.x pin is dead.
Bumped the toxic gen table's aux:bias from -0.0744 (the 1.x map-
exchange value, retained through 2.0.14) to +0.18, putting AB's
aux mean at ~0.68 with natural variance comfortably above the
0.65 gate. This was the fix shipped briefly in 2.0.9 then rolled
back in 2.0.10's "minimum-intervention" pass; the rollback
rationale ("as 1.x did") was correct at the API level but wrong
at the gameplay level since 1.x's mechanism never actually fires
under AB. Re-applied as a deliberate, scoped fix.
- Restored the 1.x noise-driven *patterned* mixed-ore visual on
hot_mixed_ores. The 1.x sister mod registered a 'mixed-ore' noise
expression via Factorio 1.1's `require('noise')` lualib helper
(removed in 2.0). Versions 2.0.0-2.0.14 fell back to per-tile
uniform-random replacement -- functionally equivalent for ore
extraction but visually a checkerboard mosaic instead of organic
stripes. Re-introduced as two minimal noise expressions in pure
2.0 table form (no string-DSL syntax to get wrong, no Lua noise-
lib dependency):
* wpe-mixed-ore-coarse: factorio-basis-noise at scale 2^-8 with
empirical 1/1.770 normalization (slowly-varying angle).
* wpe-mixed-ore-fine: factorio-basis-noise at scale 2^-2
(boundary marbling).
compute_resource_peers binds both as property expression names on
the surface; MixedOres samples both via calculate_tile_properties
in a single batched call per chunk and reproduces the 1.x noise-
shaping math (clamp -> if_else_chain -> cos/sin -> ridge clamp on
x/y -> 50% replacement window) verbatim in Lua. Mining-fluid peer
grouping (the modded-ore-aware part) is unchanged from 2.0.13.
Version: 2.0.14
Date: 08.05.2026
Bugfixes:
- data-final-fixes.lua crashed mod load when AAI Industry was
installed. The AAI Industry compat block still set
burner-lab recipe.normal.enabled and recipe.expensive.enabled,
which are 1.x difficulty-mode fields removed in Factorio 2.0.
Replaced both lines with the flat recipe.enabled = false.
- The Wire-Shortcuts compatibility block in data-final-fixes.lua
(rewriting red-wire ingredients to constant-combinator on the
repaired_machine_makes_marvin_head recipe) was using 1.x
positional ingredient shorthand `recipe.ingredients[i][1]`
/ `[i][2]`. In Factorio 2.0 ingredients are named tables
`{type, name, amount}`, so the equality check silently never
matched and the optional patch was dead. Rewritten to handle
both shorthand and named-table ingredient forms.
Changes:
- Hardened data-updates.lua biter ai_settings overrides against
future Cold_biters / Explosive_biters renames. Eight hard-coded
`data.raw.unit[name].ai_settings = ...` calls now iterate a
list with `if data.raw.unit[name] then` guards, so dropping
one of those eight prototypes upstream no longer crashes
data-updates stage.
- Removed the duplicate `tf_util.lua` at the mod root (byte-
identical copy of `data/tf_util/tf_util.lua`, `require`'d
nowhere — only the `data/tf_util/` copy is used, via
`require "data/tf_util/tf_util"` in prototypes/projectiles.lua).
Version: 2.0.13
Date: 06.05.2026
Bugfixes:
- Critical mod-load error in 2.0.12: data.lua's Step E (mixed-ore noise
expression) used `require('noise')` which was REMOVED from Factorio
2.0's lualib. Mod failed to load with "module noise not found".
Dropped the noise expression entirely. MixedOres still works -- now
uses random per-tile choice within the mining-fluid-compatible peer
group (compute_resource_peers) instead of noise-driven patterns.
Modded ore mixing still works (still iterates resource peers); only
visual pattern is lost (random mosaic vs organic stripes).
Changes:
- Per-template visual tuning so all 7 hot/cold templates have clear
character (volcanic / frozen_riches v2.0.11 looked too flat: no
cliffs, sparse decoratives).
- Added cliff_settings to all 7 hot/cold templates (none had any
previously, so they fell back to the engine's default which is
sparse-or-none under Factorio 2.0):
desert richness 0.7 (sparse outcrops)
hot_planet richness 1.0 (standard)
volcanic richness 2.0 (DENSE broken volcanic, smaller interval=20)
hot_mixed_ores richness 0.5 (light, treed)
cold_planet richness 0.6 (sparse, gentle cold)
cold_eruptions richness 1.0 (standard taiga cliffs)
frozen_riches richness 2.0 (DENSE icy outcrops, smaller interval=20)
- Added explicit `rocks` modifier to the 5 templates that lacked it
(volcanic already had PCR(2,1,1)), each tuned to theme:
desert PCR(0.6, 0.8, 1) sparse small rocks
hot_planet PCR(1, 1, 1) standard
hot_mixed_ores PCR(0.5, 0.8, 1) sparse, treed
cold_planet PCR(1, 1, 1) standard boulders
cold_eruptions PCR(1.2, 1, 1) more rocks in taiga
frozen_riches PCR(2, 1, 1) heavy icy outcrops
- Refined volcanic decorative suppression: split into two lists.
Green-named decoratives (green-bush-mini, green-fluff, green-pita,
etc., plus pita/carpet-grass/hairy-grass/small-grass/flower-bush/
desert-bush/accent-grass) still suppressed on volcanic. Brown-/sand-/
red- named decoratives (brown-fluff, brown-asterisk, brown-hairy-grass,
brown-carpet-grass, garballo, red-asterisk, sand-decal, sand-dune-decal)
now ALLOWED on volcanic since they look fitting on a scorched/dusty
lava surface and AB's lava-decal alone produced too-flat surfaces.
frozen_riches keeps the comprehensive suppression (no dirt visible
under ice).
- Exotic planet gen tables (auberge, nikara, roma_mg, kael, gigei_mg,
joenus, toxic) still had numeric height=2000000 / width=2000000
(MapGenSize fields silently dropped in 2.0). Stringified to
"2000000" so planet dimensions are properly applied.
- Stale backup files (.orig, .peek) shipped in the mod zip since
2.0.2 -- deleted (planets_cold/hot/exotic/init.lua.orig,
ores.lua.peek).
- Removed stray bare `25` value from goose gen table's hot
autoplace_control (harmless pre-existing corruption from 1.x map
exchange string, but confusing).
- Fixed always-true condition in on_chunk_generated_remove_water
(chunkpos.x > -3 OR x < 3 is always true; changed to
math.abs(x) < 4 AND math.abs(y) < 4 so water is only filled
in the 4-chunk safe zone around spawn). Pre-existing from 1.x.
- Fixed missing `force =` on two create_entity calls in the
on_research_finished lab-explode handler.
- Replaced 1.x event on_robot_pre_mined with 2.0 equivalent
on_robot_mined_entity. Robot recovery of warp button/battery
was silently dead.
Version: 2.0.12
Date: 06.05.2026
Bugfixes:
- Step A: cap inherited enemy-base density on three exotic wrappers
that had no explicit biters override and silently inherited extreme
values from their 1.x map-exchange gen tables -- previously dropped
by Factorio 2.0's MapGenSize numeric rejection (Tier 1 fixed that,
unlocking these values which the original 1.x author never intended
to take effect):
exotic_islands (kael enemy-base freq=5.17) -> PCR(1)
infested_riches (nikara enemy-base freq=30) -> PCR(2.5, 1.5, 1)
blue_moon (auberge enemy-base freq=20) -> PCR(1)
- Step B: extend volcanic on_chunk_generated rewrite table to also
catch toxic-biter-spawner + 4 toxic worm prototypes -> explosive
variants. Defense in depth: 1.x had constant aux pins via
`{ "aux", N }` modifiers which AB now ignores, so AB's natural aux
noise on volcanic occasionally peaks above Toxic_biters' 0.65 gate
and toxic spawners can appear on what should be uniform-explosive.
Changes:
- Step E: restore the sophisticated `mixed-ore` algorithm from the 1.x
sister mod (planetorio_expansion_planets 1.0.12). The 2.0.0-2.0.2
port replaced it with a 15-line random-swap on a hardcoded vanilla
ore list, losing two important behaviors:
1. Modded ore support: 1.x grouped resources by mining-fluid
requirement, so e.g. BZ aluminum / Bob's ores / AAI Industry
ores get mixed within their compatible-mining group.
The simplified version only knew about coal/iron/copper/stone.
2. Patterned mixing: 1.x used a registered `mixed-ore` noise
expression (basis-noise multioctave + random unit-vector
stripe direction) for organic mixing patterns. The simplified
version was per-tile random producing checkerboard look.
Restored both: `mixed-ore` noise expression registered in data.lua,
`compute_resource_peers` + `MixedOres` ported into planets_hot.lua
with 2.0 API renames (game.get_filtered_entity_prototypes ->
prototypes.get_entity_filtered; game.default_map_gen_settings ->
surface.map_gen_settings only, since 2.0 has no global default).
Version: 2.0.11
Date: 05.05.2026
Changes:
- Selectively re-enable Tier 4 (vanilla tile + decorative suppression)
for the two extreme-theme planets (volcanic and frozen_riches) so
they render uniformly lava / uniformly ice -- matching the original
1.x screenshots. The other 5 templates remain calibrated with
mixed terrain around their target temperature, also matching their
1.x screenshots.
- Bumped volcanic.gen.autoplace_controls.hot.size from 4.27 -> 6 and
frozen_riches.gen.autoplace_controls.cold.size from 3.31 -> 6 so
AB temperature is locked to the volcanic / frozen biome group's
distribution_temperature window across the entire surface (no
patches dipping into vegetation/mineral ranges).
- Tile suppression list (per-prototype probability = -1000000):
grass-1..4, dirt-1..7, sand-1..3, dry-dirt, red-desert-0..3
- Decorative suppression list:
green-bush-mini, green-pita, green-fluff, brown-fluff,
brown-asterisk, garballo, carpet-grass, hairy-grass, flower-bush,
accent-grass, sand-decal, etc. (~30 vanilla decoratives)
- AB-themed tiles (heat-* on volcanic, snow-* on frozen) are
temperature-gated by AB's own biome system and stay on; AB
decoratives same.
Version: 2.0.10
Date: 05.05.2026
Changes:
- Minimum-intervention rollback. The user wants the mod to run on 2.0
as the original 1.x author intended, with the smallest possible
patch surface. Rolled back every change that went BEYOND restoring
the 1.x assumptions:
* Removed per-pack autoplace controls (hot_enemy_base = 0,
frost_enemy_base = 0). The original mod had no such overrides;
biter pack distribution was governed entirely by each pack's
built-in temperature/aux probability gates, which now evaluate
correctly because the temperature pin is faithfully recreated
via cold/hot autoplace controls.
* Removed per-prototype suppression of toxic biter spawners and
worms. The original mod never suppressed prototypes.
* Removed vanilla tile suppression on volcanic and frozen_riches
(Tier 4). The original mod never suppressed vanilla tiles --
mixed AB / vanilla tile rendering is the 1.x feel.
* Removed vanilla decorative suppression. Same reason.
* Reverted volcanic on_chunk_generated handler to the original
1.x rewrite table (vanilla -> explosive only). The cold/toxic
conversion entries we added were not in the original.
* Reverted toxic gen table aux:bias to its original value
(-0.0745... from the 1.x map exchange). The 0.18 bump we added
was an explicit intervention; restoring leaves toxic-on-toxic
spawning to the biter pack's own probability gate, as 1.x did.
* Reverted volcanic and frozen_riches cold/hot.size to the
calibrated values (4.27 / 3.31) that produce mean temperature
equal to the original pin (139C / -19C). The v2.0.6 extreme
values (6 / 6) over-constrained the surface beyond what the
original pin produced.
* Removed biter density caps on the four exotic wrappers that
originally had no biters override (exotic_islands, blue_moon,
infested_riches, salty_planet). They again inherit whatever
their gen tables specify -- this matches the original behavior
even when those values come out heavy.
- Net retained patches:
Tier 1 (numeric MapGenSize -> string): essential; without it
the original gen tables are inert in 2.0.
Tier 2 (4-category taxonomy tags): purely additive metadata for
the warptorio3_2 2.4.0+ roll system. Doesn't change biters or
terrain.
Tier 3 calibrated cold/hot autoplace + aux/moisture biases:
recreates the 1.x temperature/aux/moisture pin behavior under
AB 2.0, which silently overrides the original pin keys. Numeric
targets match the 1.x pin values exactly.
Version: 2.0.9
Date: 05.05.2026
Bugfixes:
- Tier 5 (per-planet biter pack binding completed across all wrappers).
User design intent: spawn table matches map name -- frozen planets
get vanilla + frost, hot planets get vanilla + explosive, toxic
planet gets vanilla + toxic, every other planet stays vanilla-only.
Cross-contamination prevented by combination of per-pack autoplace
controls (hot_enemy_base / frost_enemy_base = 0 where unwanted)
and per-prototype suppression of toxic biter spawners/worms (since
toxic shares the vanilla `enemy-base` autoplace control and can't
be disabled at the autoplace-control layer without killing vanilla).
- planets_hot.lua: added suppress_toxic_biters() to desert, hot_planet,
hot_mixed_ores. Volcanic skipped -- its on_chunk_generated handler
already converts toxic spawners/worms into explosive variants.
- planets_exotic.lua: introduced bind_vanilla_only() and bind_toxic()
helpers, applied to all 11 gen tables. The toxic gen table gets a
bumped control-setting:aux:bias (-0.07 -> +0.18) so AB's aux noise
peaks above 0.65 across most of the surface, which is the gate
Toxic_biters' probability_expression uses. Result: toxic biters
actually appear on the toxic-themed planet for the first time
since the 1.x port.
- All other exotic wrappers (exotic_beach, rest_beach, exotic_islands,
infested_riches, blue_moon, atoll, extreme_planet, salty_planet,
purple_forest, exotic_forest, green_rock) now strictly vanilla-only
via their gen tables (xorius, grishord, sansara, goose, auberge,
nikara, roma_mg, kael, gigei_mg, joenus).
Version: 2.0.8
Date: 04.05.2026
Bugfixes:
- Vanilla decoratives (grass tufts / fluff / pita / bushes / decals)
still placed on volcanic and frozen_riches even after v2.0.7's
vanilla TILE suppression. Same root cause one layer deeper:
decorative prototypes have their own moisture/aux-gated autoplace
expressions, no temperature gate. Fix: extend the suppression
list to cover vanilla decoratives via decorative:<name>:probability
= -1000000. List includes green-bush-mini, green-pita, green-fluff,
brown-fluff, brown-asterisk, garballo, carpet-grass, hairy-grass,
flower-bush, accent-grass, sand-decal, etc. AB has its own
biome-themed decoratives that ARE temperature-gated and stay on.
- Toxic biters spawned on frozen_riches despite v2.0.5's per-pack
autoplace controls (frost_enemy_base = 1, hot_enemy_base = 0).
Toxic_biters mod uses the vanilla `enemy-base` autoplace control,
not its own (unlike Cold_biters which uses frost_enemy_base and
Explosive_biters which uses hot_enemy_base). Toxic gates on
aux >= 0.65; cold planets have aux ~0.4 mean with natural noise
variation that crosses 0.65 in patches, so toxic spawners slip
through. Fix: per-prototype suppression via
entity:toxic-biter-spawner:probability = -1000000 (and toxic worm
turrets) on cold_planet, cold_eruptions, frozen_riches.
Volcanic does NOT get this suppression -- its on_chunk_generated
handler converts toxic spawners to explosive variants, preserving
the 1.x density target.
Version: 2.0.7
Date: 04.05.2026
Bugfixes:
- Volcanic / frozen_riches still showed vanilla green grass and brown
dirt tufts despite v2.0.6 locking AB temperature to extreme values.
Verified ingame via calculate_tile_properties: temp = -20 on the
frozen surface (correct), but vanilla grass-2 / dirt-3 tiles still
autoplaced in patches. Root cause: vanilla tile prototypes have
their own autoplace expressions that gate on moisture/aux only --
temperature is NOT part of vanilla's tile selection. AB-defined
tiles ARE temperature-gated via volume_to_noise_expression in
alien-biomes biomes.lua, but vanilla tiles fire independently
whenever moisture/aux land in their vanilla windows.
- Fix: suppress vanilla grass-1..4, dirt-1..7, sand-1..3, dry-dirt,
red-desert-0..3 on volcanic and frozen_riches via per-tile
property_expression_names ["tile:<name>:probability"] = "-1000000".
AB tiles (heat-* on volcanic, snow-* on frozen) self-gate by
temperature so they remain on. Result: extreme planets are now
pure single-biome surfaces.
- Other 5 templates (desert / hot_planet / hot_mixed_ores /
cold_planet / cold_eruptions) intentionally allow mixed biomes
around their target temperature; vanilla tiles stay enabled there.
Version: 2.0.6
Date: 04.05.2026
Bugfixes:
- Volcanic surface still had grass patches under 2.0.4/2.0.5 even with
hot.size = 4.27 targeting 139C average. Root cause: AB's temperature
formula has wide range_noise (range = 50*(0.5 + hot/10)), so the LOW
end of base = avg - range can still fall below the 100C volcanic
threshold even when avg is well above 100. Math: base_low >= 100
requires hot.size >= 4.74. Bumped volcanic to hot.size = 6 (AB max)
so all pixels stay in [110, 150] -> volcanic biome range across the
whole surface.
- frozen_riches got the symmetric fix: cold.size = 6 ensures all-frozen
surface (was 3.31, base_high = 22.6 leaked into mineral/vegetation).
- Other five templates (desert, hot_planet, hot_mixed_ores, cold_planet,
cold_eruptions) intentionally want a mixed-biome surface around
their target temperature -- the 1.x screenshots show that variation.
Their cold/hot sizes stay at the calibrated values.
Version: 2.0.5
Date: 04.05.2026
Bugfixes:
- Restore the 1.x "mix of vanilla and theme-specific biters per planet"
feel that 2.0.4 over-restricted. 2.0.4 disabled vanilla enemy-base on
cold planets (so cold planets had only cold biters) and hot_enemy_base
on non-volcanic hot planets (so hot planets had only vanilla). 1.x had:
hot/volcanic planets -> vanilla + explosive
cold planets -> vanilla + cold (+ explosive on cold_eruptions
via runtime cold-volcano emissions)
Re-enabled enemy-base on cold planets and hot_enemy_base on hot planets.
Cross-contamination is still prevented via the Explosive_biters /
Cold_biters probability gates on raw temperature (>=50 / <=10), which
Fix A's temperature regime satisfies cleanly.
Version: 2.0.4
Date: 04.05.2026
Bugfixes:
- Fix biome cross-contamination (e.g. green grass and ice patches on
volcanic). Tier 3 v1 used `control-setting:temperature:bias` in
property_expression_names, but Alien Biomes overrides the vanilla
`temperature` noise expression with one that ignores temperature bias
entirely -- AB only reads `cold` and `hot` autoplace controls' size_
multiplier (formula: avg_C = 50 - 125*cold/6 + 125*hot/6). Replaced
bias with explicit `gen.autoplace_controls.{cold,hot}` per template:
desert hot.size = 0.24 (avg ~55C)
hot_planet hot.size = 2.35 (avg ~99C)
volcanic hot.size = 4.27 (avg ~139C, lava)
hot_mixed_ores hot.size = 1.49 (avg ~81C)
cold_planet cold.size = 2.26 (avg ~3C)
cold_eruptions cold.size = 2.4 (avg ~0C, taiga)
frozen_riches cold.size = 3.31 (avg ~-19C, deep ice)
- Fix cross-planet enemy contamination (Cold biters on volcanic, etc.).
Each affected template now pins per-pack autoplace controls in
`gen.autoplace_controls`:
hot_enemy_base = 0 on every non-volcanic planet (no explosive bleed)
frost_enemy_base = 0 on hot/temperate planets (no cold bleed)
frost_enemy_base = 1 on cold planets only
enemy-base = 0 on cold planets (cold biters dominate)
= 1 elsewhere
- Fix runaway biter density on the four exotic wrappers that previously
had no biters override and inherited extreme enemy-base values from
the 1.x map exchange string in the gen tables:
exotic_islands (kael freq=5.17) -> PCR(1)
infested_riches (nikara freq=30) -> PCR(2.5, 1.5, 1)
blue_moon (auberge freq=20) -> PCR(1)
salty_planet (goose freq=2) -> PCR(2)
- Defense in depth: volcanic on_chunk_generated handler now also
converts stray Cold_biters and Toxic_biters spawners and worms to
explosive variants, in case anything bypasses the autoplace controls
(runtime placement, scripted spawns, evolution-driven upgrades).
Version: 2.0.3
Date: 04.05.2026
Bugfixes:
- Fix Tier 1: numeric MapGenSize fields in 11 exotic planet gen tables (xorius,
grishord, sansara, goose, auberge, nikara, roma_mg, kael, gigei_mg, joenus,
toxic) are now strings -- Factorio 2.0 silently drops numeric MapGenSize
values during game.create_surface, so terrain_segmentation / water /
starting_area on these planets had no effect and the surfaces inherited
Nauvis defaults.
Changes:
- Tier 2: Added 4-category taxonomy tags (rest / resource / base / aggressive)
to all expansion planet templates so they participate in the warptorio3_2
2.4.0+ roll system (per-category weight multipliers and back-to-back
rejection).
- Tier 3: Replaced constant temperature / aux / moisture pins with bias
entries on the seven affected templates (desert, hot_planet, volcanic,
hot_mixed_ores, cold_planet, frozen_riches, cold_eruptions). Constant
pins flatten the noise variation that Alien Biomes (a hard dependency)
needs to pick variant-specific tile and tree windows. Surface mean
stays at the original 1.x pin value; variation is preserved.
Version: 2.0.2
Date: 03.05.2026
Changes:
- Fixed Expansion planets integration into Warptorio 3
Bug was introduced during Planetorio Expansion integration. Thanks to Nemo for fix.
Version: 2.0.1
Date: 28.04.2026
Changes:
- New Warptorio 3 (No Space Age) is used as base mod.
- Expansion planets mod integrated into main Expansion mod.
Version: 2.0.0
Date: 09.05.2025
Major changes:
- Updated to Factorio 2.0 (thanks to Shadow_Man)
- Space Age is not supported. Elevated Rails and Quality is supported.
- New game recommended. No migration support for previous savegames.
Version: 1.2.1
Compatibility:
- Made initial repaired lab compatible with k2 basic tech card, coal powered
Version: 1.2.0
Changes:
- Added 2 new planet images (from friday facts)
- Better escort droid follow behavior
Version: 1.1.99
Bugfixes:
- Fixed crash on first warp with broken lab.
Version: 1.1.98
Changes:
- Add AAI Industry items to random missions.
Version: 1.1.97
Changes:
- Improve compatibility with AAI Industry (make initial lab a burner, unlock burner labs instead).
Version: 1.1.96
Changes:
- Improve compatibility with Wire Shortcuts, replacing red/green wire with constant combinators in recipes.
Version: 1.1.95
Bugfixes:
- Fix the entity name for the "broken machine" quest.
Version: 1.1.94
Changes:
- Improves compatibility for the first "broken lab" quest (tested with BZ, Bob's, Angel's, pY).
- Takes over compatibility management with BZ.
- Set filters/limits on the inventory for the initial broken lab.
- Cap broken lab requests to the stack size for each item to avoid soft-locks.
- Refund unused items in the broken lab repair.
Version: 1.1.93
Bugfixes:
- Fixed a mess I did with "util" required lib, that could break other mods on load. Thanks BicycleEater
Changes:
- Added Arachnids_enemy as optional mod dependency. When installed, adds arachnid bosses
Version: 1.1.92
Changes:
- New mod required mod: toxic biters
- Added new modded enemy bosses
Version: 1.1.91
Bugfixes:
- Fixed turret prepare time setting
Version: 1.1.90
Changes:
- Built turret now shows a progression render for activation delay
- Changed default warptorio setting for logistic chest to "logistic-chest-passive-provider"
- Added 2 new planet images
Version: 1.1.89
Changes:
- raise error if started with limited map size
- open player map when clicked a charted POI
- Marvin will build entities if he has the required items in its trunk (after level 2)
Version: 1.1.88
Bugfixes:
- Fixed some reported crashes
Version: 1.1.87
Bugfixes:
- Fixed car hitting the companion's invisible leg
Changes:
- Added belt immunity to mission car
Version: 1.1.86
Bugfixes:
- Fixed player dying on other mod surfaces when warping
Version: 1.1.85
Bugfixes:
- Fixed ship camera ability not unlocking ship abilities gui tab
Version: 1.1.84
Bugfixes:
- Fixed a reported crash on creating a mother boss, when disabled on explosive or cold biters mods
Version: 1.1.83
Bugfixes:
- Fixed compatibility with Artisanal Reskins
Changes:
- PNG size optimized
Version: 1.1.82
Bugfixes:
- Added big humanoid bosses
- Fixed a crash on if disabled human enemies on mod options
Version: 1.1.81
Changes:
- New warpship technology: linked chests, which share the same inventory over any distance. Each technology level allows one more pair of chests to be build.
Version: 1.1.78
Changes:
- As the accelerator ability from the base mod is not working, added a new one here (reduces warp time by half)
Version: 1.1.77
Changes:
- Added new rpg potion as loot
- If you die on the platform, you will respawn on the factory floor
Version: 1.1.76
Changes:
- Added new ship ability (release a powerfull shock bomb on platform to harm that harms enemies only)
- As the stabilizer ability from the base mod is not working, added a new one here (resets evolution and clears pollution)
Version: 1.1.75
Changes:
- Added new rpg potions to boss loot (if RPGsystem is installed)
- Players left behind on warp are now killed
- If a player disconnects just before warp to join again safely, he will be warped back... and die...
- Marvin will produce science inside its trunk
Version: 1.1.74
Changes:
- New ship icons on buttons and technologies
- Some new planet images
- New technology to install a camera on the ship platform, so you can see what is going on there
- Added human enemies (they are very hard and heavily armed, so if you wish, you may disable on mod options)
Version: 1.1.73
Bugfixes:
- Fixed a reported crash on ship scan
Version: 1.1.72
Changes:
- Now we may have more missions per planet
- Added mod option to set the max number of missions per planet (default 4)
- Unexpected warp event now warns players with a counter above the head... so many lives were lost...
Version: 1.1.71
Bugfixes:
- Fixed missing recipe for fast steel smelting on the special furnace
Changes:
- Changed unexpected warp to be controlled by this expansion again, to avoid instant warp
- Elevator now works on hazzard tiles, if near ship center
Version: 1.1.70
Bugfixes:
- Fixed a reported crash on warp (temperature check)
Version: 1.1.69
Changes:
- Warp mission car/tank dying explosion is now a muni nuke
- Teleporting a warp mission car/tank will make it go boom
- When warp battery and button jumps off, camera will stay with it for 10 seconds only
- Escort Droid will only attract enemies after leaving the platform
Version: 1.1.68
Bugfixes:
- Fixed small atomic explosion
Changes:
- If a player is left behind and try to use an elevator button on a left platform, he will explode
- Disabled the new warptorio toolbar technolgy, as it is already present on this expansion
Version: 1.1.67
Compatibility:
- Added compatibility for "RampantArsenal" mod, as it was preventing Marvin's technology missions
Bugfixes:
- Fixed Marvin technolgy icon
Changes:
- Added new fast furnace special loot on marvin missions
Version: 1.1.66
Bugfixes:
- Fixed a reported crash with lab research
Changes:
- Added "warptorio-warpspider" as a locked mission
- Added catalysts to mod ores recipes
Version: 1.1.65
Bugfixes:
- Fixed a crash with CTRL+E on Marvin
Version: 1.1.64
Bugfixes:
- Fixed a crash related to "tanks" renamed technology
- Fixed some typos
Version: 1.1.63
Changes:
- Updated for game version 1.1
- Marvin hardware upgrade: the little fella is now a nice flying robot with trunk and equipment grid
Version: 1.0.62
Bugfixes:
- Fixed a crash related to cameras
Version: 1.0.61
Compatibility:
- Fixed load error with boblogistics mod
Release:
- v1.0 release
Version: 0.18.60
Bugfixes:
- Fixed load error with the new factorio version (18.41)
Changes:
- Camera updated, with zooming in and out
- Re enabled unexpected warp event
- Added surfaces to gps tags
Version: 0.18.59
Bugfixes:
- Fixed load error with the new factorio version (18.31)
Version: 0.18.58
Bugfixes:
- Fixed a crash when launching a rocket on a planet with no biters
Version: 0.18.57
Bugfixes:
- Fixed "Requesting Silo Location" button on Marvin panel
Version: 0.18.56
Bugfixes:
- Fixed worm invasion creating bosses
Version: 0.18.55
Changes:
- Made compatible with game version 18.25
- Temporary disabled the unexpected warp event
Version: 0.18.54
Changes:
- New mod options: Bosses damage and resistances Multipliers
- Added new lobster bosses if Armoured Biters mod is installed
Version: 0.18.53
Changes:
- Replaced portal graphics
Version: 0.18.52
Bugfixes:
- Fixed gui tab pane not showing tabs properly
Changes:
- Now for Marvin to detect a Silo Location, it requires a Dimensional Crystal, built with special rare ores.
- Added custom item storage tracking to the ship storage panel.
- Raised bosses damages again
Version: 0.18.51
Bugfixes:
- Fixed a problem on locking technologies
Changes:
- Added mod option to make an acomplished mission unlocks 2 technologies, for a faster game
- Raised bosses damages
Version: 0.18.50
Changes:
- Made compatible with the new warptorio2 version
- New planet pack required:planetorio_expansion_planets. You may remove the old ones.
- Raised Marvin's HP and damage
Version: 0.18.48
Bugfixes:
- Fixed a desync problem
Version: 0.18.47
Changes:
- Added custom key CTRL+E to call droids (Marvin and Escort Droid)
- New remote call: "spawn_a_new_mission"
- Reduced planet starting evolution a bit
- Reduced some missions distances a bit
Version: 0.18.46
Release:
- v18 release
Version: 0.0.46
Changes:
- Added some icons to alert messages
- Reduced the rate of fast evolution planet event
- Getting a mission now prioritizes the cheapest technologies
Version: 0.0.45
Changes:
- Difficulty on bosses and evolution is now based on ship reconstruction progress, not on warp zone anymore
Version: 0.0.44
Bugfixes:
- Fixed marvin construction button (personal laser defense) that was not working
Changes:
- Raised escort droid health to 400
Version: 0.0.43
Changes:
- Fixed a potential crash when building rocket-silo ghost
- Added incompatibility flag with biter_factions
Version: 0.0.42
Changes:
- First broken lab will drop stocked science kits when it explodes
- Reduced time for worm attack event to start after the first alert message
- Added biters to worm attack events
- Added interface for calling a worm attack event
- Reduced chance of the unexpected warp event, and added a mod option to turn it off
Version: 0.0.41
Changes:
- Added new malfunction event: unexpected warp procedure initialization! Each reactor reassembly technology researched reduces the chance
- Added interface for calling some events
Bugfixes:
- Unlocked unresearched missions being locked again after game updates
Version: 0.0.40
Changes:
- Removed warp tank resistances (harvester missions)
- Portal teleporter recaller now working on ship panel
- New mod option: Boss HP multiplier
- Reduced bosses speed
Bugfixes:
- Fixed missing localization string
- Fixed a mission typo
Version: 0.0.39
Changes:
- Fixed bosses resistances and made those values visible
- Biter bosses now have area damage, with a nice hit ground effect
- Raised escort droid HP
Version: 0.0.38
Changes:
- Using new "Stabilizer" ability warptorio event
- Added some weakness to bosses
- Marvin's head is now craftable after its first technology
Version: 0.0.37
Changes:
- Choosing a mission is now more random.
Version: 0.0.36
Bugfixes:
- Fixed a reported crash on warp (again)
Version: 0.0.35
Bugfixes:
- Fixed a reported crash on warp
Version: 0.0.34
Bugfixes:
- Fixed Marvin mission crashing (again)
Version: 0.0.33
Changes:
- Changed the icons of some ship technologies
- Built turrets now requires 5 seconds to be activated. You can disable/change this feature in mod options.
Bugfixes:
- Fixed Marvin mission crashing
- Fixed a Marvin speech typo
Version: 0.0.32
Changes:
- Added another mod option to unlock a number of technologies by type
Bugfixes:
- changed the code for locking technologies to avoid a reported bug
Version: 0.0.31
Changes:
- Reduced required time for a second mission on a planet: from 40 to 30 mins.
- Defend well you Rocket Silo: biters don't like it...
- New technology required to show harvesters recaller panel.
- Reworked gui panels
- New ship info panel to show progress on warp reactor reassembly
- Energy leak problem now drains more energy
Bugfixes:
- Fixed Marvin mission skipping some required items.
Version: 0.0.30
Changes:
- Adjusted a few technologies dependencies to match missions.
- New Marvin quest type added to unlock some late technologies, including Rocket-Silo.
- Rocket-Silo can only be built with Marvin nearby, and where it says so. Request It a location in its panel.
- Added 3 new rare ores, that spawns on specific planets. Requires a new technology.
- These new ores will be required to create special modules and a capsule to reassembly your warp ship and unlock the final warptorio technology.
- Reduced chances to have bosses.
Version: 0.0.29
Changes:
- The escort droid is not repairable
- More chances to have bosses
- More chances to have Marvin's quest
- Warp rail technologies are not part of the missions anymore
- Reduced required time for factory floor first mission
Bugfixes:
- No more Marvin fixing itself
- Fixed Marvin beam attack range
Version: 0.0.28
Changes:
- Added some mod options to unlock the first initial warp technologies.
- "Stabilizer" is a very unstable technology, so using it have a small chance to cause some collateral problems to the ship.
Bugfixes:
- fixed a missing technology localization string
Version: 0.0.27
Changes:
- "Stabilizer" ship button is a powerfull feature that weakens all aliens. To release this energy, activating it will now drain all the energy of the ship. Use with caution!
- If warp button is not recovered when it jumps off, next planet will have the same problem.
- Added platform teleport gate to the ship panel
- Added storage information to the ship panel
- Added 3 technologies to unlock the ship panel information tabs
Version: 0.0.26
Bugfixes:
- Fixed a crash with Marvin repair
Version: 0.0.25
Changes:
- Elevators can now be used anywhere on the gray platform tile
- Added to the elevator ship panel a way to get the harvesters items
- Changed harvesters icons a bit to distinguish left from right
Version: 0.0.24
Changes:
- Added more bosses (worms and a huge spawner)
- Added some loot to bosses.
Version: 0.0.23
Changes:
- Added a bunch of warptorio technologies to be unlocked by missions
Bugfixes:
- Fixed ship elevator gui crash
Version: 0.0.22
Changes:
- Added new type of mission that only Marvin can do to recover special loot items
Bugfixes:
- fixed some missing localization strings
Version: 0.0.21
Changes:
- Marvin is a bit better (HP, resistances, attacks)
- Changed some texts to be more clear on what the mission will benefit the ship if accomplished
- Added more text info to Marvin technologies, to show which abilities will be upgraded
- Added ship warp elevator: you can click a floor in the ship info panel to go there
Bugfixes:
- Prevent mission entities to be spawned near the platform
Version: 0.0.20
Changes:
- Added ship energy information panel
- Added a "portal effect" to the stairs and teleport gates
Version: 0.0.19
Changes:
- Made a new "polluted" planet to replace the default one. The previous is now named "evolution"
Version: 0.0.18
Changes:
- Added another required planet pack as mod dependency. Adds 7 new exotic planets.
- Changed planet natives calculation
Version: 0.0.17
Changes:
- Added another improbability event
Version: 0.0.16
Bugfixes:
- Fixed boss appearing too soon after warp
Version: 0.0.15
Changes:
- Marvin's Head upgrade: can now produce science according to its level. Just make sure to lock him in some cage, or he will drop science everywhere!
- Added a few speech bubbles to Marvin
- Bosses rework
Version: 0.0.14
Bugfixes:
- Killing bosses does not unlock platform technologies anymore
Version: 0.0.13
Changes:
- Raised Marvin's HP to 1K
- Reducend the chance of a planet having a second mission
- Added a new planet: The wet world
Version: 0.0.12
Bugfixes:
- removed a debug text
Version: 0.0.11
Changes:
- Made compatible with the warptorio v 1.0.3
- Added a new planet: The Great Evolution! Where biters evolve very fast.
- Replace the "polluted" warptorio default planet with the new one, until a crash is fixed. This is temporary.
Version: 0.0.10
Changes:
- Changed platform missions to the new escort missions
- Bosses are still placed sometimes, but not related to missions anymore
- Marvin can repair entities if in level 2+
- Marvin has a chance to be in a bad mood, so it will not receive orders, except move
- Tweaked some Marvin technologies
Version: 0.0.9
Changes:
- Don't Panic! Added the robot Marvin, a loyal companion, when in a good mood.
- Added 5 missions to unlock Marvin related technologies.
- Planets may have a second mission, if you stay long enough.
- Energy missions require more energy.
Bugfixes:
- Fixed a reported gui crash
Version: 0.0.8
Changes:
- Added local time on plant info panel
Bugfixes:
- Some small fixes
Version: 0.0.6
Bugfixes:
- Added another improbability event: energy generator jumps off
Version: 0.0.5
Bugfixes:
- Fixed easy boss appearing on mid games
Version: 0.0.4
Changes:
- Locked more techs over harvesters, that now depends on missions
Version: 0.0.3
Changes:
- Mission probabilities changed a bit
- Added the first improbability event: a button jumps off
- Added ship scan sound
- Uncharted planet now has random planet images
Bugfixes:
- Fixed bosses where disappearing
Version: 0.0.2
Bugfixes:
- Fixed some crashes
- Fixed chosen mission was always the same
Version: 0.0.1
Date: 13.9.2019
Info:
- Initial release: Don't Panic!