Direct a biter hive: recruit creatures, sacrifice them to build, research with pollution.
Mods introducing new content into the game.
Version: 0.9.16
Date: 2026-04-30
Changes:
- Creep edges are now slightly irregular instead of perfect Chebyshev squares. The two outermost rings of each hive/node fill at ~90% / ~65%, and a sparse extension ring (~30%) reaches one tile past the build box. Placement is gated by a deterministic per-tile hash, so the silhouette is stable across save/load and never grows fingers.
Version: 0.9.15
Date: 2026-04-30
Bugfixes:
- Network containment / placement now uses Chebyshev (axis-aligned box) distance, matching the actual hive and node footprints. Previously it used Euclidean distance (dx² + dy² ≤ r²) — the inscribed circle of each box — so hives and nodes only connected at full range when perfectly horizontally or vertically aligned, and corner regions of every box were falsely rejected. This is most visible for the Hive (range 50, box 100×100): the diagonal corners ended up nearly 30% outside the old check. Fixed in both Network.hives_for_position and Network.resolve_at.
Version: 0.9.14
Date: 2026-04-30
Bugfixes:
- Multiplayer: hive-side entities can now actually have their deconstruction marks cancelled. Director.on_marked_for_deconstruction was only calling entity.cancel_deconstruction(hive_force), which is a no-op when the marking force is anything other than hivemind (e.g., a non-hive player on the regular `player` force in MP). The handler now scopes itself to hive-owned entities (hive force, plus post-swap player-placed enemy spawners/worms) and cancels for every existing force.
Version: 0.9.13
Date: 2026-04-30
Changes:
- Pheromones now make biters attack engineer-aligned entities at the carrier's position. Recruited and disgorged units are sent with attack_area at the carrier's position (radius 16) instead of go_to_location, so they engage any player-force structures, vehicles, or other engineer stuff that happens to be at the carrier.
Version: 0.9.12
Date: 2026-04-30
Bugfixes:
- Supremacy now runs every game tick (intervals.supremacy = 1, was 6). At 10 Hz vanilla tree regen partially restored between writes and the visible drain barely moved; at 60 Hz regen has only one tick to recover and the health bar drains smoothly along the target trajectory.
Version: 0.9.11
Date: 2026-04-30
Bugfixes:
- Supremacy now actually visibly drains HP. Two compounding fixes: (1) damage_cache wrote target only when entity.health was already higher than target, so vanilla tree regen between ticks erased the drain. The write is now unconditional. (2) supremacy ticked at 1 Hz (60 game ticks); raised to 10 Hz (intervals.supremacy = 6) so the visible drain is smooth and regen can't catch up.
Version: 0.9.10
Date: 2026-04-30
Bugfixes:
- Fixed Hive Supremacy still doing nothing. The 600-tick candidate-cache rebuild was wiping the entries table and re-adding every entity with a fresh added_tick — so a tree that had been on creep for 9.99 seconds got its timer reset to 0 every 10 seconds and could never reach the 30-second lifetime. The rebuild now preserves existing entries' added_tick and only adds entities that aren't already cached. Dead entries are pruned during the walk.
Version: 0.9.9
Date: 2026-04-30
Bugfixes:
- Fixed crash on save-load after upgrading to 0.9.8: "attempt to compare nil with number" in supremacy.damage_cache. The 0.9.8 cache shape replaced dmg_per_tick / lifetime_seconds with added_tick / expires_tick / max_hp, but saves from 0.9.5–0.9.7 still hold cache entries in the old shape. damage_cache now drops entries that lack the new fields; the next candidate scan rewrites them in the current shape.
Version: 0.9.8
Date: 2026-04-30
Bugfixes:
- Fixed Hive Supremacy "trees stuck at low HP" by bypassing entity.damage entirely. Vanilla trees have full fire resistance AND regenerate health over time, so per-tick damage was being absorbed by resistance and then regenerated faster than supremacy could whittle it down. Supremacy now writes entity.health directly (linear drain over the lifetime), then entity.die()'s the entity at expiry. Tree pollution burst still fires on death.
Version: 0.9.7
Date: 2026-04-30
Changes:
- Clicking a Hive Node now opens the chest of the nearest hive on the surface, mirroring the click-on-Hive behaviour. No more empty roboport GUI on nodes.
Version: 0.9.6
Date: 2026-04-30
Bugfixes:
- Rocks now take supremacy damage. simple-entity is no longer in the skip list — safe_max_health filters out the truly-no-health variants while letting damageable rocks through.
- Trees no longer get stuck at 1 HP. Vanilla trees have very high physical resistance, which floored the per-tick damage to 1 and left them undying. Trees are now damaged with "fire" (100% damage in vanilla) instead of "physical". Added a low-HP safety: any entity at <= 1 HP after damage gets entity.die() to finish it.
Version: 0.9.5
Date: 2026-04-30
Bugfixes:
- Fixed crash on save-load: "LuaEntityPrototype doesn't contain key max_health." Removing the unit_number filter in 0.9.4 exposed entity types whose prototype doesn't expose max_health (rocks / simple-entity / decoratives). Added simple-entity, decorative, and cliff to the supremacy skip list, and pcall-wrap the prototype.max_health read with a fallback to entity.health.
Version: 0.9.4
Date: 2026-04-30
Bugfixes:
- Fixed Hive Supremacy doing zero damage. The candidate cache was keyed by entity.unit_number; on the running engine, every entity returned by find_entities_filtered{force={player,neutral}} (trees, rocks, decoratives) had nil unit_number, so the cache was empty every cycle. Cache is now an array keyed by index.
- Removed the attack-group bypass pcall spam. Both commandable.unit_group and commandable.group throw "doesn't contain key" on every call (verified via 0.9.3 telemetry: ag_err >800/sec, ag_ug + ag_g = 0). Until a working property name is found, the bypass is a no-op — every biter routes through the trickle. Saves the pcall cost on every recruited unit.
Version: 0.9.3
Date: 2026-04-30
Tunables:
- Bumped recruit.bucket_cap_factor 5 → 10. Networks now hold up to 20s of saved-up trickle, so previously-untouched pockets get a brief surge instead of a dribble when the player walks past.
Telemetry:
- [perf] line gains find / recruit / absorb / damage / dispatch operation counters. Wallclock ms still emitted (zero-floored under ~15ms on Windows os.clock granularity); op counts give shape data when ms is 0.
- [recruit] line gains attack-group probe counters (ag_ug, ag_g, ag_miss, ag_err) so we can confirm which spelling of LuaCommandable.unit_group / .group works on the running engine and how often the bypass actually fires.
- New [supremacy] line: cache size, rebuild calls, entries added, damage calls, kills, off-creep skips, and entities skipped because they had no unit_number. Diagnoses "nothing is taking damage" without code dives.
Version: 0.9.2
Date: 2026-04-30
Bugfixes:
- Fixed crash on save-load: "Require can't be used outside of control.lua parsing." Four deferred require() calls inside event handler functions (creatures.lua resolve_destination, vent.lua closest_non_full_for_unit, death.lua collapse_orphans, telemetry.lua flush_recruit) hoisted to the top of their modules. Factorio disallows require() at runtime; only data-load and control-script-parsing phases may call it.
Version: 0.9.1
Date: 2026-04-30
Bugfixes:
- Fixed crash on save-load: "LuaCommandable doesn't contain key group". The attack-group bypass in recruit_around used the wrong property name; in Factorio 2.0 a unit's group is reachable via commandable.unit_group, not commandable.group. Defensive pcall fallback in case future engine builds rename it again.
Version: 0.9.0
Date: 2026-04-30
Major:
- Recruitment throttling: without pollution, biters now arrive as a steady trickle scaling with how many spawners (any force) sit inside the network's recruit-box union. Default 0.05 biters/sec per spawner, pooled across hives + hive nodes + pheromone vents in the network. With pollution, attack-group biters bypass the throttle and are recruited the moment they enter range.
- Pheromone Vent: new buildable. Diverts the network's incoming biter stream and dispatches gathered biters as autonomous attack groups via the engine's unit-group AI. The hive does not target — the engine routes the group. Buildable anywhere, free to place; the placing player must own a hive or the vent collapses on placement. Visually a recoloured Hive Node (deep red).
- Network collapse: when the last hive in a network is destroyed, every other hive-side building in that network (hive nodes, pheromone vents, hive labs, hive storage chests) is destroyed too, and any hive workers in the network die. Storage releases stored creatures as live units before destruction. Player-placed biter/spitter spawners and worm turrets are NOT destroyed — they revert to ordinary vanilla nests/turrets on the enemy force. In-tick repositioning (place new hive, old dies) is preserved by checking the world for surviving hives.
Tech:
- New single-shot tech "Pheromone Vent" (prerequisite Small Worms) unlocks the Pheromone Vent recipe.
- New infinite tech "Attack Group Size" (prerequisite Pheromone Vent) adds +2 biters per dispatched group per level.
Performance:
- Unified per-member scan with work-spread replaces the old separate intervals.recruit (120t) and intervals.absorb (30t) cadences. Each tick processes ceil(N/T) hives + hive nodes on a deterministic rotating cursor (T = intervals.scan = 60), so per-tick scan count is constant relative to network size — no moloch supertick.
- Hive nodes now also absorb biters (route into the chest of the cached nearest hive), shortening unit walks across the network.
- Workers spawn from the nearest hive OR hive node, whichever is closer to the ghost.
- Hive Supremacy now caches its damage candidates per hive, rebuilding the cache every 600t. The 60t damage tick is a cheap walk over the cache; the per-entity surface.get_tile lookup is gone.
- Cached `nearest_hive_unit_number` per hive node (lazy invalidation) drops the per-tick O(N×M) lookup for networks with many nodes.
- Workers.tick() short-circuits when no jobs are pending.
Telemetry:
- script-output/hm-debug.txt now appends two log lines per scan flush (every 60 ticks): a [recruit] line with per-network bucket state (tokens, R, spawners) and aggregate group/trickle/skipped counters, plus a [perf] line with per-system millisecond timings. Both gated on the existing Debug enable.
Known limitations:
- Pheromone Vent mode markers (small / default / large) are deferred to a follow-up. All vents operate in default mode for now; mode still scales with hm-attack-group-size tech.
Version: 0.8.1
Date: 2026-04-30
Bugfixes:
- 0.8.0 failed to load: hm-hive-supremacy tech read shared.science.research_packs (nil); Factorio then required count_formula. Fixed to read shared.supremacy.research_packs.
- tools/check-load.ps1 now propagates Factorio's exit code so failed prototype loads actually break the build pipeline instead of silently shipping a broken zip.
Version: 0.8.0
Date: 2026-04-30
Major:
- New tech "Hive Supremacy" (manual research, prerequisite Hive Labs). While researched, anything standing on hive creep that isn't part of the hive ecosystem withers. Hive force entities and vanilla biters/spitters/spawners/worms are immune. Trees die in ~30s and release their vanilla pollution burst into the world; player buildings and other neutral entities die in ~60s.
Version: 0.7.2
Date: 2026-04-30
Bugfixes:
- Fixed mod failing to load with "Missing sound: __Hive_Mind_Reworked__/legacy/.../creep-01.ogg". The 8 creep walking sounds are now vendored under sound/creep/ and shipped with the release.
- Removed the legacy/hive-mind-2.0-port-reference archive from the repo; it was excluded from the package and only pulled the build into a broken state.
Version: 0.7.1
Date: 2026-04-30
Changes:
- Mod folder renamed to Hive_Mind_Reworked to match the title; locale and asset paths follow.
- Bugfix pass on the worker dispatcher and supporting modules.
- Embedded gleba-spawner / wriggler / biolab graphics + sounds into the mod so the egg-raft hive and wriggler workers render without Space Age installed.
Version: 0.7.0
Date: 2026-04-30
Renamed:
- Mod retitled from "Hive Mind Reloaded" to "Hive Mind Reworked".
- Internal mod portal name changed from "Hive_Mind" to "Hive_Mind_Reworked".
- Hive, Hive Node, Hive Lab, and hive worker visuals now use vendored Gleba/Biolab/wiggler assets even when Space Age is disabled.
Major:
- Replaced the flying construction-bot pipeline with a unit-based worker dispatcher (script/workers.lua). Hive workers are now ground-walking units, not flying robots.
- Worker base is small-wriggler-pentapod when Space Age is loaded; falls back to small-biter otherwise.
- Direct placement now converts the placed entity to a ghost and queues it on the dispatcher so a worker walks out of the nearest hive and materialises it. The hive itself is the only direct-placed building (no workers exist before the first hive lands).
- Hive Nodes also recruit creatures within their own 50×50 box, scaled by the Attraction Reach tech.
- Hive Node placement extends the network by its own reach — a node is buildable wherever its 50×50 box would connect to the existing network.
- Eden creep growth replaced by deterministic Chebyshev ring fill: creep stays inside the hive's axis-aligned box, no fingers, no offshoots.
- New "Reject the Hive" button next to "Join the Hive". Rejection is permanent for the session.
- New infinite Attraction Reach tech (+10% recruitment radius per level).
- New spitter spawner item / proxy / recipe — same mechanics as the biter spawner.
- Vanilla research is hidden on the hive force; only hm-* techs appear in the tree.
- Loadout watchdog ensures every director carries one of every currently-buildable item and pins them to the quickbar.
- Auto-refund-on-place: cursor item refills after every successful placement (cursor first, main inventory fallback).
- Cost.consume pre-checks the network's pollution capacity and only mutates state on success — failed placements never burn biters.
- Insufficient-pollution message now reports actual need vs have side-by-side.
- Placements over trees / rocks / cliffs are refused and any auto-deconstruction order on those obstructions is cancelled.
- Ghosts that cannot be fulfilled (tech, obstruction, charge failure, missing item proto) are destroyed instead of left lingering.
- Hive workers are excluded from creature roles so the absorber can't try to file them as hm-creature-hm-hive-worker (which would crash on_tick).
- Active Pheromones now make hives disgorge stored creatures and send them toward the pheromone carrier; absorption pauses while the lure is active.
Visual:
- Hive renders as a 2× scaled gleba-spawner ("egg raft") tinted orange-red when Space Age is loaded; falls back to a tinted biter-spawner.
- Floating pollution label above each hive shows the network's available pollution, recoloured green / amber / red.
- Clicking a hive routes player.opened to its hidden storage chest so the inventory you care about pops up.
- Reject button + Join button live in a private hm-button-flow under player.gui.top, so destroying the flow leaves no empty mod_gui frame.
- Creep is back to a single royal-purple tile.
- Build cost surfaces in every placeable item's tooltip.
Cleanup:
- shared.ranges.recruit subsumed by ranges.hive / ranges.hive_node.
- hm-construction-robot / Hive.init / Hive.tick_robots / on_robot_built handler removed.
- hive_storage chest still exists internally but the click is transparently routed to it.
Version: 0.6.0
Date: 2026-04-29
Major:
- Rewrote build/cost flow: every hive recipe is now a free cursor stamp, the hive network pays the pollution cost on placement.
- Added network-wide resource pooling: connected hives + nodes share one virtual chest for cost reads/writes and lab supply.
- Hive death now respawns stored creatures as living units on the hive force (R6).
- Spawner and worm proxy ghosts now correctly swap to real entities on enemy force when a hive worker finishes building them.
- Direct placement of hive items is also charged from the network; insufficient funds destroy the entity and refund the cursor item.
- Build cost for arbitrary buildings is derived from recipe ingredients * a per-item pollution factor table.
Visual:
- All hive structures (hive, node, lab, storage chest, proxies) now render as colored variants of the biter spawner.
- Hive workers die with a small-biter corpse instead of vanishing silently.
- Creep is now four shades of purple, placed at random for organic texture.
- Creep growth is now random-ray rather than square-ring; the front advances unevenly.
Content:
- Added Small/Medium/Big/Behemoth Worm recipes, items, ghosts, and tech-gated unlocks.
- Worm techs are researched manually with Pollution Science Pack; spawner and lab unlocks remain event-flagged (place hive / spread creep).
Cleanup:
- Removed the per-recruit-tick debug log file (hm-debug.txt).
- Stripped stale pollution ingredients from hive-tier recipes (player can now actually craft them).
- Hive construction radius reduced to a 100x100 box (50x50 for nodes); recruitment radius unchanged at 1000 tiles.
Version: 0.5.0 Date: 2026-04-28 Renamed the rebooted mod to Hive Mind Reloaded. Rebooted the mod into a clean scaffold. Archived the legacy 2.0 port implementation under legacy/hive-mind-2.0-port-reference.