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
2 months ago
2.0 - 2.1
79
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