Enemy Mods Harmonizer


Improves compatibility between enemy mods and Combat Mechanics Overhaul by normalizing legacy flying masks, adding ground-static and ground-unit support where appropriate, and safely harmonizing masks across enemy prototypes, projectiles, and streams.

Tweaks
3 days ago
2.0
23
Combat Enemies

Changelog

Version: 1.2.8
Date: 2026-05-04
  Changes:
    - Broadened Armoured Biters Gore Snapper detection to include ERM/localised/icon-based duplicate variants.
    - Applies Behemoth/Leviathan Snapper scaling to all matching variants, not only prototypes with simple names.
    - Keeps previous dynamic Bob scaling, repair cleanup, flying safety, and neutral/environment guards.

Version: 1.2.7
Date: 2026-05-04
  Fixes:
    - Added an early data-updates balance pass for the original Armoured Biters Snapper prototypes so Behemoth/Leviathan Snapper health is corrected before Enemy Race Manager clones them.
    - Kept a final data-final-fixes pass as a safety fallback for original and cloned armoured-biter prototypes.
    - Broadened repair pseudo-resistance cleanup across enemy prototype classes so ERM Normal variants no longer show Unknown key: damage-type-name.repair.
    - Added defensive locale fallback for repair damage type display.
  Balance:
    - Behemoth Snapper target remains at least 80% of Bob Behemoth biter health, with a 25,000 HP floor.
    - Leviathan Snapper target remains at least 80% of Bob Leviathan biter health, with a 60,000 HP floor.
Version: 1.2.6
Date: 2026-05-04
  Fixes:
    - Fixed Armoured Biters Snapper harmonization not applying to exact prototype names in some Bob Enemies + ERM + CMO stacks.
    - Added explicit fallback patching for behemoth-armoured-biter and leviathan-armoured-biter.
    - Replaced remaining Lua-pattern detection with plain substring detection for armoured/armored biter prototypes.
  Balance:
    - Keeps the 1.2.5 dynamic scaling targets: Behemoth Snapper at least 80% of Bob Behemoth biter HP, Leviathan Snapper at least 80% of Bob Leviathan biter HP, with safe floors of 25,000 and 60,000.
Version: 1.2.5
Date: 2026-05-03
  Audit / Compatibility:
    - Added optional dependency on zerm_postprocess so ERM post-processing runs before the harmonizer cleanup pass.
    - Restricted repair pseudo-resistance cleanup to enemy-like prototypes instead of all prototypes.
    - Added neutral/environment safety guards so Maraxsis fish and similar neutral ecosystem units are not converted into CMO ground targets.
    - Preserved flying enemy identity from CMO/ERM and avoided adding ground-unit to flying enemies.

  Balance:
    - Changed Bob Enemies + Armoured Biters/Gore high-tier snapper scaling from fixed HP floors to dynamic targets based on 80% of the matching Bob Behemoth/Leviathan biter health, with safe fallbacks.
    - Kept the patch targeted to high-tier armoured/snapper biters only.
Version: 1.2.4
Date: 2026-05-03
  Audit / Bugfixes:
    - Full audit pass against Armoured Biters, Bob's Enemies, Enemy Race Manager, Combat Mechanics Overhaul, Maraxsis, and Immersive Colony Builder data files.
    - Fixed snapper balance matching to catch Armoured Biters prototype names such as behemoth-armoured-biter and leviathan-armoured-biter, not only localized/display names containing Snapper.
    - Preserved CMO flying enemy identity: units already marked as flying no longer receive an extra ground-unit trigger target mask from the harmonizer.
    - Made repair pseudo-resistance cleanup more defensive by removing any resistance type string containing repair.

  Balance:
    - Kept the previous targeted minimums for Armoured Biters/Gore high-tier snappers only: Behemoth 25,000 HP, Leviathan 60,000 HP, with moderate resistance floors.
    - Still does not rebalance infected civilians/soldiers, normal ERM variants, legendary corrupted enemies, or Bob's core biter families.
Version: 1.2.3
Date: 2026-05-03
  Bugfixes:
    - Broadened repair pseudo-resistance cleanup so Enemy Race Manager cloned units no longer show Unknown key: damage-type-name.repair in Factoriopedia.
    - Added a defensive fallback for mods that store repair resistance using an already-localized key string.
Version: 1.2.2
Date: 2026-05-03

  Balance:
    - Added targeted Bob's Enemies + Armoured Biters Gore snapper harmonization.
    - Buffed high-tier Behemoth Snapper durability to a 25,000 HP minimum.
    - Buffed high-tier Leviathan Snapper durability to a 60,000 HP minimum.
    - Added moderate resistance minimums for those high-tier snappers only.

  Changes:
    - Removed visible repair damage-type resistances from enemy prototypes to avoid Factoriopedia showing an unknown repair damage type.

  Notes:
    - Does not rebalance infected civilians/soldiers, normal ERM variants, or legendary corrupted enemies.
Version: 1.2.1
Date: 2026-05-03

  Bugfixes:
    - Fixed Factorio 2.0 collision_mask / hit_collision_mask handling.
    - Prevented connector-style masks from being converted into invalid arrays.
    - Repairs legacy array-style collision connectors defensively when encountered.

  Compatibility:
    - Added optional Maraxsis dependency for clearer load ordering in enemy-heavy modpacks.
Version: 1.2.0
Date: 2026-05-03

  Major Features:
    - Prepared release package with thumbnail and changelog.
    - Adds compatibility harmonization for enemy mods used with Combat Mechanics Overhaul.

  Features:
    - Adds optional startup setting to add ground-static masks to enemy turrets and spawners.
    - Adds optional startup setting to normalize legacy flying mask names.
    - Adds optional startup logging for a one-line patch summary.

  Changes:
    - Normalizes older flying mask names such as air-unit and flying_units where appropriate.
    - Safely patches enemy prototypes, projectiles, and streams during data-final-fixes.
    - Keeps changes defensive so missing optional mods do not break loading.

  Compatibility:
    - Optional support for Bob Enemies.
    - Optional support for Armoured Biters.
    - Optional support for Enemy Race Manager.
    - Optional support for Combat Mechanics Overhaul.

  Notes:
    - Intended to reduce compatibility friction, not to rebalance enemy health or damage.