Tungsten Rain — Orbital Kinetic Bombardment

by fess932

100 kg tungsten rods circling the planet at 0.01c (107 kt each). No warhead, no radiation — the explosive is velocity. Build a storage ring in orbit and rain them on biter nests.

Content
11 days ago
2.0 - 2.1
329
Combat

Changelog

Version: 0.4.0
Date: 2026-09-18
  Features:
    - Needle cartridges and the protected zone. Reverse-select (right-drag) with the targeter to
      mark the protected zone for the current planet — one per planet, a new one replaces the old;
      alt-reverse-select clears it. The ring then guards that ground on its own: every enemy
      that walks in (biters, spitters, nests, worms, pentapods) gets a needle and dies; demolishers
      shrug needles off like a pellet — those still take a tungsten rod. No blast,
      no crater, nothing of yours is touched. Needles cannot be aimed by hand — they only work
      over the zone. Tungsten rods stay the manual heavy artillery.
    - Cartridges are forged by the stations themselves out of the asteroid dust the ring sweeps
      up: no item, no recipe, no delivery. Each station of an active ring adds 0.2 per second
      (a full 20-station ring: 4 per second), up to 1000 per ring. One cartridge sprays up to
      100 enemies within 32 tiles of its first target. All four numbers are map settings.
    - The status window shows each ring's needle stock.
    - A cartridge is visible all the way down: one hot streak falls from the sky, flashes open
      over the group and fans out into a needle for every target, each tracking its biter.
      Part of the "Visual shockwave" setting.
    - Lore: a cartridge is a 10 kg bundle of 100 steel needles held at 15 km/s. It falls whole
      under its plasma cocoon; at about a kilometre the spiral's induced current runs out, the
      binding lets go and the cocoon itself blows the bundle open — one needle per target. Open
      it in orbit instead and the needles would burn up like meteors on the way down.
  Bugfixes:
    - Rampant compressed squads no longer "rise from the dead". Rampant shows a whole squad as
      one biter and pops the next one out where it died; a kill now clears the whole stack on
      that spot. A compressed squad costs one needle instead of a cartridge per biter a second
      apart, and a rod's blast no longer leaves the rest of the stack standing.
    - Rampant eggs no longer hatch under fire. Eggs (and Rampant's other drones) are hostile
      combat robots that spawn biters when they die; needles now target them too, and both
      needles and rods vaporize them instead of killing them, so there is nothing left to hatch.
  Optimizations:
    - The zone is searched in 128-tile pieces, each once per second, spread evenly over the
      ticks; an empty magazine or a paused ring costs nothing.
Version: 0.3.2
Date: 2026-09-18
  Optimizations:
    - Auto-fire (orbital patrol) no longer stutters the game every sweep. It used to do the whole
      sweep in one tick: scan every force on every planet (enemy and neutral included) for
      radars, then search a 900x900 tile square around each radar separately — a base with
      dozens of overlapping radars was searched dozens of times over, every 10 seconds.
    - The sweep is now spread over the interval: radar coverage is searched a small piece
      (4x4 chunks) per tick, then nests are clustered a batch per tick, and the ring fires when
      its sweep completes: a small, even load instead of a one-tick spike. Rods may leave a few
      seconds later than before.
    - Radars are tracked from build events instead of being searched for across the whole
      planet every sweep (one full scan when the save is first loaded with this version).
    - Only rings that are enabled, built and charged are swept at all. Overlapping radar
      coverage is merged so every tile is searched once, and the search is filtered to enemy
      forces inside the engine.
    - Nest clustering (auto-fire and carpet bombardment) uses a spatial grid instead of comparing
      every nest with every other: 2000 nests went from ~80 ms to ~4 ms. Same strikes as before.
  Changes:
    - Auto-fire interval can no longer be set below 10 seconds (was 1 s).
Version: 0.3.1
Date: 2026-09-18
  Changes:
    - Lore fix, round two (thanks again to the mod-portal physicists). At 0.01c a rod is ~400x
      faster than orbital speed, so it never orbits: every station already bends it toward the
      planet by its share of the circle, twenty times a lap. Firing is therefore not a "hard
      downward kick" out of nowhere but a double turn: the station overdrives its magnet from a
      capacitor bank for one pass and bends the rod about twice its usual angle, so the next chord
      no longer clears the horizon and ends in the ground. A skipped turn would send the rod off on
      the tangent into deep space — which is why it never was the answer.
    - The recoil no longer holds the stations up — it would blow them away: each bend shoves a
      station outward ~750x harder than gravity pulls it in. The stations now hang on a closed
      tether hoop spun in orbit from asteroid carbon, and the recoil becomes hoop tension. This is
      also what caps ring capacity. Station, targeter, technology and ring capacity descriptions
      reworded (EN + RU). No gameplay change.
Version: 0.3.0
Date: 2026-09-18
  Changes:
    - Ported to Factorio 2.1. The mod now requires Factorio 2.1 (base and space-age >= 2.1);
      Factorio 2.0 players should stay on 0.2.10. No code changes were needed: the mod uses none
      of the APIs removed or renamed in 2.1, and explosion/scorchmark effects are still picked from
      a fallback list, so a renamed vanilla prototype degrades to the next candidate instead of
      crashing. No gameplay change.
  Bugfixes:
    - Fixed the 0.2.9 changelog entry, which was missing its Version header (two Date lines under
      0.2.10). Factorio treats a malformed changelog as unreadable and hides it in the in-game mod
      list.
Version: 0.2.10
Date: 2026-06-15
  Changes:
    - Lore fix (thanks to the mod-portal physicists). "A shot is just a skipped turn" was geometrically
      wrong: a rod on straight chords between stations stays outside the ring forever, so a station
      simply not deflecting only widens its orbit — it never hits the ground. Firing is now described
      honestly: the firing station dumps its capacitor reserve into one hard inward kick that bends the
      rod off its safe chord and down into the atmosphere. Also owned the recoil: magnetic bending does
      no work on the rod (cheap to hold), but every bend kicks back on the station, so the ring is
      really a swarm of statites holding themselves up on the recoil of the tungsten they throw — let
      one lose power and it falls out of the sky. Item, station, technology and cooldown descriptions
      reworded (EN + RU). No gameplay change.
Version: 0.2.9
Date: 2026-06-15
  Bugfixes:
    - Buffered rods now keep spinning up after the platform leaves. The "start the next rod's
      spin-up" step was nested inside the parked-platform loop, so once the freighter dropped its
      load and departed, the ring finished the rod already charging and then stalled — the buffered
      rods just sat there. It now runs as its own pass over every ring each second, independent of
      any platform being parked: deliver a load, fly away, and the ring charges the whole buffer one
      rod at a time on its own. This was the whole point of the buffer (0.2.2); it only worked while
      parked. Pulling rods from the hub and assembling stations still need a platform in orbit.
Version: 0.2.8
Date: 2026-06-15
  Changes:
    - Pulses now stack on the same target instead of hitting it once. Every pulse damages the whole
      growing disc the shockwave front has swept, so a target under the blast takes a hit on every
      pass: the center is hammered pulse after pulse, the rim once the front reaches it. Dropped the
      "each entity caught once" rule — the point is that it dies, even if it takes all the pulses to
      get there. A target under the crosshair now eats up to (pulses) hits, so even a low-power ring
      grinds it down.
Version: 0.2.7
Date: 2026-06-15
  Bugfixes:
    - Damage no longer leaves gaps. Each expanding pulse used to damage only its own thin ring band
      (r_inner, r_outer], which had two holes: a target sitting exactly on the impact point (distance
      0) was skipped, and a moving biter could slip between two bands — the front reached its old
      spot, it ran into a band that had already passed, and nothing ever hit it. The damage now rolls
      out as a GROWING disc: every mobile target (anything with a unit_number) is caught once, the
      instant the front reaches it, tracked in a shared per-strike set so it can't be hit twice and
      can't escape by moving. Static entities (no unit_number, never move) keep the thin band. Net
      effect: a biter standing under the crosshair now actually dies. (If one still survives, the
      ring power is too low — damage is 500k x power x falloff; finish the ring or raise the damage.)
Version: 0.2.6
Date: 2026-06-15
  Changes:
    - The "Shockwave damage type" setting is gone. The strike is now ALWAYS relativistic and there
      is nothing to misconfigure: damage is subtracted straight from health (a lethal hit deletes
      the target), so no percentage resist, flat resist, per-hit damage cap or "overkill protection"
      can stop it — exactly the armour Rampant fixed bolts onto every damage type, custom ones
      included, at data-final-fixes. This is what kills a 60k-HP regenerating biter that shrugged off
      a capped conventional hit. The same impact additionally lands impact + physical + explosion
      damage through the normal damage system (so vanilla armour and other mods' on-damage hooks
      still react), but the health chunk is what guarantees the kill. Reminder: damage still scales
      with ring power (full ring one-shots such a biter across the whole radius; a half-built ring
      may not reach the rim).
Version: 0.2.5
Date: 2026-06-14
  Features:
    - Auto-fire (orbital patrol): an optional mode where the rings fire on their own. Every interval
      each ring rains rods on the nearest enemy nests — and, optionally, worms — sitting within
      radar coverage, clustered by blast radius (no wasted rods), nearest threats first, capped by
      charged rods. Off by default. Four new settings: enable, interval, range around radars
      (default 448 = vanilla radar far scan), and whether to also hit worms.
Version: 0.2.4
Date: 2026-06-14
  Features:
    - Carpet bombardment: dragging the targeter over a nest field now rains a rod on every enemy
      spawner inside — but the targets are clustered by blast radius first, so one rod covers a
      whole clump and no slug is wasted. Strike points are sorted densest-first, so if the ring
      runs low on charged rods it hits the worst clusters before running dry. A small box or a
      click on empty ground still does a single strike at the center. This is the answer to nests
      breeding faster than you can pick them off one at a time.
Version: 0.2.3
Date: 2026-06-14
  Bugfixes:
    - Relativistic damage now truly ignores resistance. A novel damage type was not enough:
      Rampant fixed (and similar) blanket-resist every registered damage type at data-final-fixes,
      custom ones included, so nests showed a 60% "Relativistic" resist. The relativistic strike
      now subtracts straight from health (lethal hits delete the target), bypassing all percentage
      and flat resistance. Other configured damage types still obey vanilla resistances.
Version: 0.2.2
Date: 2026-06-14
  Features:
    - Expanding-ring damage: the strike no longer deals its damage in a single instant frame.
      It now rolls outward from the impact point as a shockwave, in steps (default 6, 0.5 s apart,
      a 3 s sweep from center to rim), decelerating on the same curve as the visual blast front so
      damage and graphics stay locked together. The core takes the hypervelocity penetrator hit at
      impact; each target is then caught once, as the front passes it, with normal falloff (100%
      center to 30% rim). Two new settings: damage steps (1 = one instant full-radius hit) and
      time between steps. The visual wave duration now tracks this window.
  Changes:
    - Lore + recipe: the ring no longer accelerates rods — the rod accelerates ITSELF. Rods now
      cost 2 rocket fuel (the engine charge: the same propellant a platform thruster burns). The
      rod fires its own engine up to speed while circulating inside the ring, and the deflector
      stations only HOLD it on a stable orbit during the burn and after. Station count is now a
      containment limit: the faster the rod, the more deflectors it takes to hold it, so stations
      still cap speed and damage. "Spin-up" is now the rod's own burn time (F=ma with a fixed
      little engine): linear in the held speed, so a full ring takes the whole configured time and
      a half-built ring half as long. Item, technology and setting descriptions rewritten to match.
    - Rod intake reworked: the ring now empties the hub straight into a buffer, up to capacity,
      in one pass — a freighter can drop its whole load and leave, and the rods spin up one at a
      time afterwards without it being parked. Previously a rod was only pulled when its spin-up
      began, so every shot waited on a fresh pull. The status window shows buffered rods as
      "charged/capacity (+queued)".
Version: 0.2.1
Date: 2026-06-12
  Features:
    - thumbnail.png
Version: 0.2.0
Date: 2026-06-12
  Features:
    - Storage ring: per-planet, per-force magazine of pre-accelerated rods. Slugs are pulled from
      orbiting platform hubs and spun up in the background (default 60 s each, capacity 10).
      Firing only releases an already-charged rod (beam extraction: one station skips a turn).
      No cooldown between shots by default — rate of fire is limited by rod spin-up time;
      an optional minimum interval between shots remains as a setting (default 0).
    - Buildable ring: the ring is a necklace of deflector stations (new item, 1 t = one rocket
      each). Deliver stations to an orbiting hub; the ring assembles itself, one per second.
      Top speed grows linearly with station count: damage scales as N^2, blast radius as N^(2/3),
      spin-up time as N^2 (a half-built ring hits at 25% but charges 4x faster). Default 20
      stations for full power (setting). A shot is a skipped turn at one station.
    - Ring activation toggle: rings start inactive and pull nothing from hubs. Alt-select with
      the targeter enables/pauses assembly above the current planet, so freighter platforms can
      load up at one planet without feeding its ring. Pausing keeps the charge fireable.
    - Remote interface: build_ring (testing) added; ring_status now reports stations, power and
      enabled state.
    - Fireball: fire damage component (default 150,000 at center, same falloff) plus fires ignited
      in the inner blast zone. Like a nuclear blast, but without the radiation.
    - New runtime settings: fire damage, ignite epicenter, rod spin-up time, ring capacity.
    - Impacts chart the blast area (1.5x radius), so results are visible through fog of war.
    - Status window (second shortcut-bar button): per-planet ring list with stations, power,
      charged rods and spin-up countdown, plus pause/resume buttons per ring. Refreshes live.
    - Visual shockwave: a continuous expanding blast front (glowing ring + two layers of a
      procedurally generated dust torus, animated per tick) sweeps to the full blast radius
      over ~1.2 s, with sparse secondary detonations, scattered scorchmarks and smouldering
      smoke. The central fireball is a staggered cluster of nuke-class explosions. Pure
      cosmetics, toggleable in settings.
    - Incoming tracer: the rod is visible for ~0.17 s before impact as a white-hot streak
      diving into the target at a random per-strike entry angle, with a light source on the
      tip. After impact the trail lingers for ~0.7 s, fading from white-hot to pale blue as
      the ionized wake recombines.
    - Remote interface: ring_status and charge_ring (testing) added.
  Changes:
    - New "Relativistic" (tungsten-kinetic) damage type, used by default: resistances only apply
      to listed damage types, and no mod lists this one — full damage always goes through.
      Evolution never prepared a defense against objects arriving at a percent of lightspeed.
    - Shockwave damage type is configurable: relativistic / explosion / impact / laser /
      physical. Pick "explosion" (what vanilla nukes use) to play by vanilla balance rules;
      Rampant "fixed" nests resist physical and fire at 99.99% but leak 8% of explosion.
    - Targeter is now a shortcut-bar remote (like the artillery remote in 2.0): free, spawns
      into the cursor, appears after researching the technology. Its recipe is removed.
    - Rod recipe reworked: 8 tungsten plates + 3 carbon + 2 copper cables (80 kg core, 15 kg
      ablative carbon sheath, 5 kg copper Faraday spiral). The spiral is gripped inductively by
      the ring's deflectors; the sheath vaporizes on entry into a plasma cocoon around the nose.
    - Cargo landing pads removed as a rod source: a rod on the ground cannot be released from an
      orbital ring. Rods must be delivered to the hub of a platform orbiting the target planet.
    - Lore pass: technology, item and setting descriptions rewritten around the storage ring;
      English technology description brought to parity with Russian.
Version: 0.1.0
Date: 2026-06-12
  Features:
    - Tungsten rod (100 kg @ 0.01c, ~107 kt kinetic): physical damage, 67-tile radius, linear falloff.
    - Mass driver targeter (selection tool): click to designate, 3 s to impact.
    - Ammo logistics: rods consumed from orbiting platform hubs or cargo landing pads.
    - Runtime settings: damage, radius, cooldown, delay, rod requirement, friendly fire, trees.
    - Remote interface "tungsten_rain" for testing and future auto-targeting integrations.