Roguelike Wave Defense

by jijhhv

Survive 20 waves of scripted biter assaults. After each wave, choose one of three permanent buffs. Based on Space Age and Rampant.

Content
13 days ago
2.0 - 2.1
60
Combat Mining Manufacturing

Changelog

-- Roguelike Wave Defense 1.1.1
Date: 2026-08-31
  Features:
    - Added "Industrial Death" buff (mid-game, requires Industrial Rebirth):
      grants a Death Box — insert a pistol to receive a random vanilla item
    - Added buff numbering system: /rl-list-buffs lists all buffs by index,
      /rl-give-buff <number> grants a buff directly
    - Ore generator icons now match the items they produce
    - "Chinese Can Fly" buff English name corrected
    - Surreal Soil plants can now accept productivity/efficiency module 1
      (removed inherited Gleba tile restrictions)
    - Vulcanus Mind I now grants 20 recyclers
    - "Future Is Here" buff: robot frame count adjusted to 100K
  Fixes:
    - Fixed "Unknown key: entity-name.rl-tech-ore" locale error
    - Fixed death box crashing on Factorio 2.1 (game.item_prototypes →
      prototypes.get_item_filtered API migration)
    - Fixed death box producing mod-exclusive items (now filters out rl-* items)
    - Fixed quality upgrader and ore button infinite duplication exploit
      (selection-tool spawnable flag removed; cursor consume restored)
  Localisation:
    - English (en)
    - Simplified Chinese (zh-CN)
-- Roguelike Wave Defense 1.1.0
Date: 2026-08-30
  Notes:
    - Factorio 2.1 is now the sole target version.  The 2.0 build line is
      discontinued.  Version numbering convention: 2.0 builds used 1.0.x,
      2.1 builds use 1.1.x.
  Features:
    - Added storage versioning system with on_configuration_changed
      migrations (pre-versioning saves are auto-upgraded to 1.1.0)
    - Renamed internal buff IDs from "thor_person_*" to "fulgora_person_*"
      to match the official English translation (Fulgora)
    - Storage migration automatically renames thor_person_* keys in
      buff_selected / buff_appearances / buff_stack_count on load
    - Separated debug/admin commands into scripts/commands.lua
  Fixes:
    - Fixed severe garbled text caused by corrupted UTF-8 byte escape
      sequences in Chinese strings across control.lua, config.lua,
      wave-status.lua, and commands.lua
    - Aligned all buff English names (name_en) with the official
      translations in the buff specification spreadsheet
    - Fixed "armored_up" buff Chinese name (was showing wrong characters)
    - Matthew Effect English name now matches spec exactly (no space
      after comma)
  Localisation:
    - English (en)
    - Simplified Chinese (zh-CN)
-- Roguelike Wave Defense 1.0.5
Date: 2026-08-27
  Features:
    - Now builds for both Factorio 2.0 and Factorio 2.1 (separate zip files)
    - Thor Person scrap recycling recipes now benefit from the
      scrap-recycling-productivity technology (+10% per level, same as vanilla)
    - Perfect Recycler now correctly returns 100% of self-recycling items
      (productivity bonus was being silently consumed by ignored_by_productivity)
    - Added Chinese + English names for 3 tile types (yumako/jellynut
      transplant soil, surreal soil) and 5 resource entities
      (scrap A/B/C, compressed scrap, luxury scrap)
  Fixes:
    - Fixed wave reward GUI not appearing when all nests are captured
      (captured nests trigger on_entity_destroyed, not on_entity_died — the
      on-tick nest-survival check now also calls present_reward)
    - Fixed force-gated mod recipes (scrap recycling, Nauvis alts, soil
      recipes, etc.) becoming disabled after any mod version change
      (recipe.enabled is runtime state that resets on prototype reload)
    - Fixed "This Is Ridiculous" buff breaking the quantum processor
      recycling recipe (now correctly has auto_recycle = false)
    - Fixed Vulcanus Mind II / Gleba Mind II / Thor Person II generating
      redundant "Nauvis alternative" copies for recipes that don't have
      surface conditions (recipes without planet lock are left untouched)
    - Fixed the mod adding side effects when loaded into a save that was
      created without it — it now starts disabled and shows a notice
      (admin can still opt in with /rl-enable)
  Localisation:
    - English (en)
    - Simplified Chinese (zh-CN)
-- Roguelike Wave Defense 1.0.4
Date: 2026-08-23
  Features:
    - New startup setting "Disable native nests (Nauvis)" (default ON): the mod
      takes over enemy generation on the battle surface. Turn it OFF to let
      vanilla biter nests and nest expansion coexist with the mod's waves
  Fixes:
    - Fixed waves spawning on whatever planet the player currently stands on
      (Space Age): waves are now always fixed to Nauvis
    - Fixed native-nest disabling also killing other planets' wildlife (e.g.
      Gleba pentapod nests): the purge now only affects Nauvis
    - Fixed reward chests spawning where the player's camera is looking
      (remote/map view) instead of next to the player's character
    - Fixed swarms targeting the player's body position instead of their
      buildings: the attack destination is now the nearest player-built
      structure near the wave anchor
    - Fixed swarms stopping forever after destroying their target: they now
      re-target the nearest building whenever they have no attack target, and
      idle swarms re-scan so freshly built structures are attacked again
    - Fixed crash "LuaCommandable doesn't contain key unit_count" in the
      swarm re-targeting ticker
  Localisation:
    - English (en)
    - Simplified Chinese (zh-CN)
-- Roguelike Wave Defense 1.0.3
Date: 2026-08-13
  Fixes:
    - Fixed wave-gated elite families (strafers/stompers) never spawning in
      regular waves: elite units are now drawn directly by the budget loop
      with a wave-scaled weight, not only after the entity cap is hit
    - Fixed other units standing idle on demolisher waves: demolisher bodies
      are huge, so they no longer spawn inside the nest cluster. They spawn
      at a fixed 200-tile radius on random bearings and advance on the base
      on their own
    - Removed the demolisher-per-wave cap (all demolishers from the budget
      now spawn, spread around the 200-tile ring)
  Balance:
    - Elite units appear in regular waves from their unlock wave onward
  Localisation:
    - English (en)
    - Simplified Chinese (zh-CN)
-- Roguelike Wave Defense 1.0.2
Date: 2026-08-07
  Balance:
    - Lava tiles now granted by Vulcanus Mind II instead of Vulcanus Mind I
      (lava pond access is a mid-game perk, not an early one)
    - Stone-furnace -> calcite recipe rebalanced: 2 stone furnaces -> 1 calcite
  Fixes:
    - Fixed nests always spawning as a single nest: the deterministic (map-seed)
      random generator made every nest sample the SAME candidate points, so only
      the first nest ever found a spot. A shared generator is now reused per wave
    - Nests now spawn as one compact CLUSTER around an anchor instead of being
      scattered across the whole spawn ring; the enemy unit group spawns right
      on top of the cluster (one combined target area)
  Debug:
    - /rl-debug-wave now force-triggers the next wave in ANY state: it clears an
      in-progress wave (destroys nests/enemies) or closes the reward UI first
  Localisation:
    - English (en)
    - Simplified Chinese (zh-CN)
-- Roguelike Wave Defense 1.0.1
Date: 2026-08-06
  Fixes:
    - HUD panels (wave countdown + active buffs) are now draggable via their title bar,
      minimizable, and closable; closed panels reopen with /rl-hud [wave|buff|all]
    - HUD refresh switched to in-place updates so dragging is never interrupted
    - HUD labels now follow the player's language (Chinese players no longer see English)
    - Wave nest capture support: wave nests can be captured with the capture robot into a
      captive biter spawner (biter egg farm); wave-clear logic stays correct
    - Fixed garbled Chinese text in wave arrival message (was showing random characters)
    - Fixed lava/oil tile item names showing raw numeric codes (added tile-name localisation)
    - Replaced locale escape sequences with plain UTF-8 text so Chinese names display correctly
    - Renamed the "armored_up" buff in Chinese (pure name change, no gameplay change)
  Localisation:
    - English (en)
    - Simplified Chinese (zh-CN)
-- Roguelike Wave Defense 1.0.0
Date: 2026-08-05
  Features:
    - 20 scripted waves with a design-token "attack strength" budget
    - After each wave, choose 1 of 3 permanent buffs (3 choices per reward screen)
    - 30-minute wave interval (adjustable) with a pollution-based early-trigger
    - Pollution progress bar + wave countdown HUD (next-wave strength x 500 pollution to trigger early)
    - Wave vs pollution trigger cooldown: waves can never fire more often than every 5 minutes
    - Timer & pollution bar only resume after the player picks the reward buff
    - Difficulty multipliers in Mod Settings:
        * Wave interval multiplier      (1.0 = 30 min)
        * Attack strength multiplier    (1.0 = baseline)
        * Nest count multiplier         (1.0 = baseline)
        * Pollution threshold multiplier (1.0 = strength x 500)
    - Temporary buffs, quests with bottomless donation boxes, magic box, quality upgrader,
      ore generators, surreal plants, space platforms, lava/oil tiles, and more
  Localisation:
    - English (en)
    - Simplified Chinese (zh-CN)
  Notes:
    - Requires Factorio 2.0 + Space Age
    - RampantFixed is optional (not yet used by the wave AI)
    - Changing data-updates autoplace requires reloading the save