Enemy Race Manager

by heyqule

Add support to have multiple races of enemies and add various enhancements to enemy races. They become tougher as you kill them. Added aerial enemies to all races. Buffed defensive entities and some attacks to balance with high level enemies. Free For All games!! Please visit the mod page or search "ERM -" mods to download the new demo races.

10 days ago
Combat Enemies Environment


Version: 1.20.8
Date: 2023-09-22

    - When enable-bitter is uncheck, enemy force is no longer consider as active_race. So it excludes from one race / planet autoplace.
    - Increase evolution_points for each killed unit from 1% to 2% of spawner killed factor.

    - Not default max attack range now gradually increase from level 1 - level 5. This fixes nothing in early game can hit an unit that has very high max attack range.
Version: 1.20.7
Date: 2023-09-01

    - Turn off debug flag. >.>
Version: 1.20.6
Date: 2023-08-30

    - ERM roach world changed from 4-10 minutes per expansion to 5-15 minutes.

    - Fixed no autoplace crash when players enters Space Exploration vault. Vault enemy depends on "race on menu" in startup settings.
Version: 1.20.5
Date: 2023-08-27

    - Added support to add attack-able entity by name. Added "mining-depot" to the list.
Version: 1.20.4
Date: 2023-08-27

    - Fix attempt to index field 'custom_attack_race_settings' crash
Version: 1.20.3
Date: 2023-08-27

    - Fix an incorrect comparison from custom_attack_helper.
Version: 1.20.2
Date: 2023-08-27

    - Fix a crash from custom_attack_helper when tick is missing.
Version: 1.20.1
Date: 2023-08-26

    - Fixed locale for K2 creep setting.
Version: 1.20.0
Date: 2023-08-26

    - Improved time to live unit handling.
    - >>> BobEnemies and Natural Evolution Enemies <<<
    - Lifted incompatibility for Bobs Enemies and Natural Evolution Enemies (theSAguy's original versions).  They no longer crash when ERM enemy levels.
    - They don't crash the game anymore. But they are not balanced with ERM level or ERM FFA.
    - They belong to "enemy" force.
    - They only work in default map mode.  Other map modes are not supported. (2 ways, 4 ways, one race / planet)
    - >>> EMR enemies showcase in menu background <<<
    - This is done by replacing default biters entities. It may affect mods relying on those entities.  It can be enable/disable on startup setting.
    - Added a framework to defined the showcase units in race mod's code. (see erm_zerg's data.lua for example)
    - >>> Disable Aerial behaviour for air units <<<
    - Added an options to toggle off aerial collision layer for air units.
    - Air unit will follow land pathing, should no longer flying over the lake or other blocking objects.
    - >>> Killing spawner / turret decrease evolution point <<<
    - Killing spawners and turrets decrease enemy's evolution point.  Prevent them from leveling up.
    - This feature is off by default, can be enabled in map setting tab.

    - All acid patches have 5s initial lifetime and 15s max lifetime.
    - Nerfed vanilla spitter's extremely high acid dmg per second by 30%
    - Nerfed vanilla spitter's acids lifetime to 5s, max lifetime to 15s.
    - Changed Atomic wave damage type for atomic-rocket from explosive to radioactive.
    - All units, turret, spawners have a max of 75% radioactive damage cap.

    - Fixed an issue that armoured biter spawn spec were not included.
    - Fixed an issue where race caches in race mods are not updated when race levels up.
    - Fixed ForceHelper.extract_race_name_from() get 'erm_vanilla' for non-enemy force.
Version: 1.19.2
Date: 2023-08-12

    - Fixed a start up crash when a spawn specification did not included temperature.
    - Fixed a start up crash when none of the spawn specifications loaded.
Version: 1.19.1
Date: 2023-08-11

    - Fix a crash where settings in race mod cache did not properly refresh.
Version: 1.19.0
Date: 2023-08-11

    - Rebuild default autoplace workflow to support unlimited race mods.
    - default autoplace now supports temperature and elevation variation under certain conditions.
    - Armoured/Cold/Explosive/Toxic biters support terrain temperature modifier for default mapping method.
    - All custom biters support map color changes.
    - Added "Enforce Temperature" startup settings. When this is set, spawners in default mapping method are generated according to its temperature specification.
    - A patch of no-one land may generated under certain conditions. Treat it as oasis, if the enemies have not expanded into it.
    - Removed dependency of erm_ prefix.  Added new way to register ERM race for data manipulation in data stage.
    - Added erm_libs as dependency.

    - ERM Roach death world now uses 100% starting area, instead of 75%
    - Change default boss spawn attack group timer from 3.5mins to 7mins

    - Removed autoplace for non-level 1 spawner/turret.  Leveled entities are always corrected by controller.
    - This also eliminates an ancient bug where high level spawns at level 1.

    - Main detail window has dynamic width to accompany longer race name.

    - Fixed an crash when an non ERM force somehow assigned an ERM dropship into their group. [Mod: team competition]
    - Fixed map generation to use string equal to compare mod_name, rather than string.find, to avoid name collision.
Version: 1.18.7
Date: 2023-08-05

    - Fixed a crash caused by ForceHelper.extract_race_name_from is caching non ERM races. [Mod: team competition]
Version: 1.18.6
Date: 2023-08-03

    - Turn off debug mode, for the Nth time. lol.
Version: 1.18.5
Date: 2023-08-03

    - Increase cost of each unit for attack groups to balance recently change of new units and attacks
    - Custom attack group's MIXED_UNIT_POINTS changed from 20 to 25. 150 units to 120.
    - Custom attack group's FLYING_UNIT_POINTS changed from 50 to 75. 60 units to 40.
    - Custom attack group's DROPSHIP_UNIT_POINTS changed from 100 to 200. 30 units to 15.
    - enemyracemanager-attack-meter-threshold multipler default reduced from 1.5x to 1.25x
    - K2 Creep can be toggle based on startup setting for each race.  They are default to ON.
    - Expansion buildings now spawn decoration if the building support it.
    - Cannon shell for enemy damage changed, standard shell deals heavy single target and 2 radius aoe light damage, explosive deal 4 radius aoe with heavy damage

    - Add drop_player_unit() to custom attack helper.
Version: 1.18.4
Date: 2023-07-30

    - Refactored force helper and race setting helper.

    - Fix drop unit in custom attack crash when it's used with projectiles.
Version: 1.18.3
Date: 2023-07-30

    - Add functions for upcoming team color and map color handling.

    - Fixed GUI crash when there are other non ERM enemy_ prefixed forces presents. [Mod: team competition]
    - Fixed a crash when onBiterBaseBuilt happens on a non ERM race.  [Mod: team competition]
Version: 1.18.2
Date: 2023-07-29

    - Boss mode no longer have hard limited to erm_zerg and erm_toss.  Other races can extend it.

    - Fix a crash in CustomAttackHelper.drop_batch_units()
Version: 1.18.1
Date: 2023-07-29

    - Turn off debug mode, again!
Version: 1.18.0
Date: 2023-07-26

    - Added Unit's time to live subsystem, unit dies once the time is up.
    - This system uses Unit's min_pursue_time as time_to_live timer.
    - min_pursue_time's base game default is 10 seconds.  Units in this system should have lifespan of maximum 5 mins for optimal performance.
    - A race can have maximum of 500 time_to_live units.  The older units will be killed when it overflows.
    - Time to live unit kills do not count toward attack points

    - Units from dropships / custom spawn now added to its parent unit group.
    - *** Removed Level Requirement Multiplier from setting. ***  May affect existing game. Please adjust [Level Up] Evolution Point Multiplier.
    - Enhanced Custom attack helper to support more variances of attacks
    - enemyracemanager-max-attack-range is now an int setting, you may have to reset it to your desire range.
    - Added new 26, 32, 42 range
    - unit attack ranges are now dynamic based on your max range settings.
    - long range unit is now 75% of max range, medium range target is 50% and short range is 25%.

    - Race name column now print proper label, instead of race codename.

    - Fixed an issue on custom attack group is using wrong force for the new group.

    - Race name in GUI is defined with race_settings.label = {gui.label-race}

    - Added a new remote interface function to register new race. "register_new_enemy_race"
    - Please see script/remote.lua in erm_zerg for example.
Version: 1.17.4
Date: 2023-07-15

    - Changed command center teleport box width from 32 to 48 tiles.
    - Adjusted custom attack groups' attack_area radius.
    - [Experimental] Custom attack groups should clear nearby attack-able entities before moving on to the next base.
    - [Experimental] Custom attack groups should pick a closer attack position to reduce transit time.
    - Deprecated Level Requirement Multiplier in Start up setting. Please use [Level Up] Evolution Point Multiplier in map setting instead.  They serve same purpose.
    - ** Use value < 1 to slow down or value > 1 to speed up the level speed with Evolution Point Multiplier.
    - ** Level Requirement Multiplier setting will remove in next release.

    - FFA health multiplier will ignore entity with HP over 10 million to prevent crash.
Version: 1.17.3
Date: 2023-05-16

    - The following are Cold/Explosive/Toxic Biters changes
    - Behemoth creatures spawn evolution changed from 0.9 to 0.85.
    - Leviathan creatures spawn evolution changed from 0.95+ to 0.9.
    - Mother creatures spawn evolution changed from 0.975 to 0.925.
    - Consolidated big creatures spawn chance to be 55% at 1.0 evolution.
    - Consolidated behemoth creatures spawn chance to be 40% at 1.0 evolution.
    - Consolidated leviathan creatures spawn chance to be 4% at 1.0 evolution.
    - Consolidated mother creatures spawn chance to be 1% at 1.0 evolution.

    - Fixed a bug which explosive worm from explosive biters used an incorrect autoplace function [Discovered by CC02]
    - Fixed a crash when a player disable worm from explosive/cold/toxic biter setting.
Version: 1.17.2
Date: 2023-05-03

    - Syntax error on the enemy replacement from last minute change. [Fixed by bolderbrush10]
Version: 1.17.1
Date: 2023-05-01

    - Fixed reset button profiler crash.
    - Fixed a crash when replacing enemy with SearchlightAssault mod installed.
    - Added cold/explosive/toxic biter spawner to vanilla structure list.
Version: 1.17.0
Date: 2023-03-12

    - Added support for Milestones mod.
    - Added Toxic Biters compatibility
    - *** "Default" enemy spawner generating method changes ***
    - Each race groups together under certain autoplace conditions.
    - Free for all now works better under this method.

    - Remote API name changed from "enemy_race_manager" to "enemyracemanager". Made it consistent with the name in info.json.
    - Pollution multiplier changed from 0.05 to 0.025 by default
    - Changed default featured groups spawn chance from 25% to 33%
    - Tweaked featured groups for Armour biter, cold biter, explosive biter and toxic biter.
    - Tweaked splitter damage for cold biter, explosive biter and toxic biter.
    - Changed tooltip for reset biter button.
    - Add profilers to reset biter function.
Version: 1.16.8
Date: 2023-01-29

    - Removed enhanced electric-pole and substation from military target
    - Barrel to steel plate recipe return 32 plates to balance IR3 price [IR3-only].

    - Fixed a crash when IR3 enabled.
    - Fixed IR3 projectiles do not hit air. It had same issues as IR2.
Version: 1.16.7
Date: 2023-01-13

    - Added pollution to join attack multiplier to mod's start up setting.  Higher level unit requires more pollution to generate.
    - (Default Setting: 0.05) Level 20 unit requires 2x pollution to generate.  Level 10 unit requires 1.5x pollution to generate.
    - (Setting: 0.025) Level 20 unit requires 1.5x pollution to generate.  Level 10 unit requires 1.25x pollution to generate.
    - (Setting: 0.01) Level 20 unit requires 1.2x pollution to generate.  Level 10 unit requires 1.1x pollution to generate.
    - (Setting: 0) No change to unit's pollution value.
    - Small damage reduction at lower levels for corrupted robots.
    - Biter's featured group changes.
    - Add short range big worm for construction bot spawn.

    - Moved some UI variables to global table.
    - Fixed a crash when rocket launch on a surface which does not have an assigned enemy force.
Version: 1.16.6
Date: 2022-12-29

    - Fix a crash when army control hotkey is pressed while army control is not active.
Version: 1.16.5
Date: 2022-12-20

    - Buffed player's construction / logistic robot to have 500 health, regardless of max level difficulty.

    - Fixed a crash when logistic robot spawn in vanilla biter feature group. (no one play against biters with this mod, lol).
Version: 1.16.4
Date: 2022-12-19

    - Fixed a multiplayer issue, mod-enemyracemanager was registered for the following events when the map was saved but has not re-registered them as a result of loading: on_entity_spawned.
Version: 1.16.3
Date: 2022-12-19

    - Fixed that nuking the boss can kill the player vision.
    - Fixed a tab handler crash with LTN management window.
    - Fixed a crash caused by post process mod was treated as an enemy race in 1 race / surface configuration.
Version: 1.16.2
Date: 2022-12-16

    - Fix a crash when launching Psi tracking satellite.
Version: 1.16.1
Date: 2022-12-16

    - "construction bot not repairable" always apply, regardless of defense enhance option.

    - Fix a crash when spawn a boss on a not supported race.
Version: 1.16.0
Date: 2022-12-12

  Major Features:
    - ----- Boss Framework (Proof of Concept release) -----
    - Boss spawner is revealed by launching a "Psi Tracking Satellite".
    - Currently only supported by **erm_zerg** and **erm_protoss**. Plan to support all races when it's out of POC phase.
    - The goal of this mode is time trail boss fight and of course, to rekt your base.
    - Added Psi Tracking Satellite. It reveals a boss spawner and returns 1200 space science pack.
    - Once boss spawner revealed, launching additional Psi Tracking Satellite will not spawn new boss until the existing boss has either killed or despawned.
    - The map chunk where the boss sit is revealed to players.
    - Boss sends out elite attack group periodically. (approx twice per nauvis day)
    - Boss performs various attacks when it takes damage.
    - When the boss is defeated, infinity chest(s) with intermediate products will spawn for 14 nauvis days. (appox 1.5hr game time)
    - When you don't defeat the boss in time, it'll release super attacks to your base before it despawn!
    - Added barrel >> steele plate recipe for furnace. Boss Rewards may return liquid barrels. You can use this recipe to recycle empty barrel.
    - It's NOT balanced at all, attacks are not final, and it may be buggy.  Good luck if you want to try it.
    - ----- End Boss Framework -----
    - ----- Player Army Frameworks -----
    - The player army frameworks only apply to ERM - Terran at the moment.
    - Press Ctrl + A (default) to bring up the Army UI
    - ----- Population Framework -----
    - Base Max Population is 150. Max pop can be increased with Follower Combat Drone research at 1:1 ratio.
    - Each unit can have different population value. E.g 1 for marine, 2 for tank/wraith, 5 for battlecruiser.
    - Set the number of units which you want to automatically deployed.
    - ----- End Population Framework -----
    - ----- Teleportation Framework -----
    - Build 2 command centers (styled radars)
    - Select "from" and "to" CC to link them
    - Move your units to "from" CC, indicated by green outline
    - Active CC scans player units to teleport every 15 seconds. 24 units per batch. Up to 96 units per minute.
    - ----- End Teleportation Framework -----
    - ----- Army Deployment Framework -----
    - Build a deployer (styled assembling machines)
    - Deployer is now required to build military units. Assembling machine can no longer build them.
    - Deployer may automatically deploy military units when total population under player set threshold and max population.
    - ----- End Deployment Framework -----
    - ----- End Player Army Frameworks -----

    - Added post process package for some indexes. Requires "Enemy Race Manager - Post Process" package.

    - Added new graphics for explosions and attack effects. Requires "Enemy Race Manager Asset Pack" package.

    - Added "max population" sound effect
    - Added "force under attack" when player unit dies.
    - Added "base under attack" to replace default alert.

    - When a custom attack squad completes an attack command, it will pick a new attack area. Instead of converting to automatic group.
    - Level up check now runs every 10 mins, not configurable.
    - When boss is active, leveling up is halt until boss mode end.
    - Killing units / turrets now always count toward evolution points.
    - Tweaked base expansion formation number.
    - Tweaked unit group will not slow down to wait members. Slow members run double speed to catch up.
    - When a unit group marks as always angry, they will always be distracted by anything.
    - Most reinforced item with lower than 1000HP have buffed to around 900 - 1000 HP. Except blue belt, which stay at 680.
    - Added reinforced substation with 1000 HP.
    - Reinforced inserters, reinforced power poles and reinforced substations are military targets.
    - Attack point consumption change for custom attack groups, air unit group 75 -> 50, dropship group 150 -> 100.
    - Base game Energy-Shield and SE adaptive armour, SE medpack now multiply with FreeForAll multiplier.
    - Changed building processor to have 11.5 tiles gaps when calling find_non_colliding_position

    - Refactored custom attack handler to reduce remote calls.
    - Refactored GUI handlers.
    - Construction bots are now not repairable. They have 2x of health. This change prevented bots stacking when they try to repair each other. It also freed up the internal construction queue. They replenish health when they dock.
Version: 1.15.5
Date: 2022-09-02

    - Yet another attempt to fix high level units escaping the level processor in early game.
    - Added an early game high level unit elimination function.
Version: 1.15.4
Date: 2022-08-20

    - Fix level slider bug where when you are one level under max_level. The slide uses 0.05 interval. (Github Issue 23)
Version: 1.15.3
Date: 2022-07-10

    - Buffed HP on reinforced belt from 510 to 680
    - Buffed HP on reinforced inserter from 480 to 600
    - Buffed HP on reinforced pipe from 500 to 600
    - Buffed HP on reinforced underground pipe from 600 to 750
    - Buffed HP on reinforced underground belt from 600 to 750
    - Changed setting description for 1.1.61 Setting UI Changes.
    - Level processor check interval can now be changed in startup setting. Default: 60 minutes, Options: 5, 15, 30, 60
    - Improve unit performance by changing enemies distraction_cooldown from 20 to 300.

    - Fixed The enemy level requirement multiplier is not taken into account when manually setting a race's level. (Github Issue 22)
Version: 1.15.2
Date: 2022-06-22

    - Reinforced wall now take 10 wall to produce 10 reinforced wall. Upped from 4.
    - Updated surface exclusion list

    - Added support to set neutral for neutral forces which created from other mods. (fixes new races attack indestructible entities in Ribbon Maze mod)
Version: 1.15.1
Date: 2022-06-07

    - Fix a crash when leviathan armor biter has enabled.
Version: 1.15.0
Date: 2022-06-06

    - --- Featured squad ----
    - this spawns a signature squad from each race.
    - e.g a team of zergling and ultralisk.  Please refer to race mods changelog for details
    - Default spawn chance is 25%.
    - --- / Featured squad ----
    - --- Elite squad ----
    - this spawn higher level squads.  Default elite level is your current level + 2 (adjustable, 1 - 5).
    - Max elite unit levels are up to level 25.
    - Units have about 20-30% more HP and damage when they are at level 25, comparing to level 20.
    - this squad utilizes team formations from featured squads.
    - they spawn based on the accumulated attack points. (default 60000 points, adjustable)
    - ON by default. It starts to spawn when race tier reaches 3. (0.8 evolution factor).
    - --- / Elite squad ----
    - --- Biter Featured Squads ----
    - added {'behemoth-spitter', 'behemoth-biter'} to featured group
    - --- Biter Featured Flying Squads ----
    - added {'distractor', 'destroyer'} to flying featured group
    - Featured and elite squads start to spawn when they reach tier 3.
    - Added Remote API endpoint to spawn featured group and elite group
    - Added Remote API endpoint to add attack points to an enemy race.
    - Added Remote API document: https://github.com/heyqule/enemy_race_manager/blob/main/doc/remote_api.md

    - Re-added "nuke biter" button to kill bugged very high level units in early game.
    - Change min_expansion_cooldown from 2 minutes to 4 minutes for ERM Roach World presets.
    - Adjusted unit health algo. levels 2 - 4 health have lowered to balance health raise between levels. Level 5 - 19 have approx +/- 5% changes. Level 20 stays the same.
    - Refactored custom attack handling (dropships and proxy builder)
    - Changed max projectile range to 64 tiles by default.
    - Increased Artillery damage bonus from 25% to 33% for each strong explosive level.
    - Increased spidertron health from 3000 to 6000
    - Increased tank health from 4000 to 5000
    - Increased car health from 1350 to 2250
    - Slightly lowered car, tank, spidertron overall damage resistances.
    - Reduced explosion damage reduction on vehicles (tank, spidertron, car), as explosion friendly fire has been removed.
    - -- Biter Race Changes ---
    - logistic bot will no longer spawn from regular flying attack squad.
    - logistic bot unit cooldown changed from 15-10s to 45-30s

    - Fix an issue which a custom group may stuck at gathering when calling a generating group function from remote API.
Version: 1.14.3
Date: 2022-04-07

    - Fixed a crash when processing super weapon attack point with 2 race split and same races for both axes.
Version: 1.14.2
Date: 2022-04-01

    - Fixed an issue where race level up did not trigger map processor to update buildings.
    - Fixed a missing translation in setting.
Version: 1.14.1
Date: 2022-03-16

    - Fixed a crash caused by cron scheduler
    - Removed some debug log()
Version: 1.14.0
Date: 2022-03-04

    - Launching rocket will add attack point for a randomly selected race or primary race of the surface. (default: ON, 200 points)
    - Using super weapon (e.g Nukes) will add attack point for a randomly selected race or primary race of the surface. (default: ON, 300 points)
    - Supported super weapons from these mods: space-exploration, AtomicArtillery, M.I.R.V, Ion Cannon SE, Kastorio2, Industrial Revolution
    - Adjust M.I.R.V, Ion Cannon SE and Space Exploration's iridium-piledriver damage with ERM's defense value.
    - Using planet purifier type of super weapon will add 10x the points (M.I.R.V, plague-rocket from SE)
    - Using super weapon may cause enemy to send its survived units to your base. (Up to MAX_GROUP_SIZE)
    - New attribute to track accumulated attack points for each race. (To be used for future features.)

    - Improve custom attack handling
    - Improve cron scheduler
    - Improve race data upgrade for easier expansions
    - Events will only process active races based on the mapping method setting.
    - Reinforced turrets HP changed from 1.5x to 2x
    - Landmines now slow enemy for 30s, up from 5s.  Increase damage by 3x

    - Fix cooldown on enemy logistic bot
    - Fix enemy may fight each others when Free For All is off.
Version: 1.13.4
Date: 2022-02-11

    - Added "spaceship" and "RTStasisRealm" surface to exclusion list.
    - map process queue and attack group indexer now ignore surfaces in exclusion list

    - Fixed an issue where reinforced building recipes don't unlock on existing saves which have the tech researched.
Version: 1.13.3
Date: 2022-02-04

    - Fixed improper minable and icon, which crash with boblogistic.
    - Fixed new pipe-to-ground entity fast replace group, which crash Krastorio 2.
    - Fixed a crash with Industrial evolution.
Version: 1.13.2
Date: 2022-02-02

    - Forgot to disable debug mode once again lol.
Version: 1.13.1
Date: 2022-02-02

    - Fixed a crash with aai-container icons incompatibility
Version: 1.13.0
Date: 2022-02-02

    - Added reinforced structures for military.
    - Reinforced red belt / blue belt (3x health),
    - Reinforced fast inserters (3x),
    - Reinforced pipes (5x)
    - Reinforced medium pole (5x)
    - Reinforced requester chests (2x)
    - Reinforced stone wall (2x)
    - Reinforced laser turret (1.5x)
    - Reinforced gun turret (1.5x)
    - Reinforced flamethrower (1.5x)
    - Resistance 99% to fire, 33% to all. Reinforced wall is still 100% to fire, 50% to all.
    - New items support upgrade planner

    - research_queue_setting set to "always" in Roach World Map Presents
    - Max number of group and max group size are now a map setting, instead of startup setting. They can be adjusted mid-game. If you are using non-default setting, please load your game and change those 2 settings in "map setting" tab
    - Free for all multipliers changed from 8x to 10x, player entity health to 12.5x
    - Buffed tank & car health, resistance and damage when enhanced defense enabled.
    - Disable friendly fire on explosive rocket and cannon when enhanced defense enabled.
Version: 1.12.1
Date: 2022-01-22

    - set_autonomous() when the ERM group finish its command.

    - Fixed a crash in ermGroupCacheTableCleanup function again. XD
Version: 1.12.0
Date: 2022-01-15

    - Native support for Free for All.  You can enable in startup setting. (BETA)
    - When FFA mode is enabled:
    - Player entity health multiplied by 8x
    - Enemy damage also multiplied by 8x.
    - The multiplier is to balance the time enemy units take to kill each other.

    - Certain surfaces will no longer assign races. E.g aai-signals, starmap from SE. (Inspired from Rampant 2.0)
    - When attack group can't find attack path, it will automatically destroy and refund some attack points.
    - Raise pick spawn / attack group location retries from 4 to 12.
    - All default weapon can now hit air. Removed Allow ground weapons to hit air units setting
    - Biters now have resistance similar to other races. Max 90 for elemental and 95 for physical
    - Biter spawners now use same spawn cooldown as zerg, {600, 300} ticks.
    - Added a slider to adjust evolution factor in enemy detail GUI.

    - Fixed a crash in ermGroupCacheTableCleanup function
Version: 1.11.0
Date: 2012-12-26

    - New map presets: ERM Roach World and ERM Roach Death World.
    - min enemy expansion = 2 mins and max enemy expansion = 10 mins. Base presets are 4 mins and 60 mins respectively.

    - Resistance update applies to all walls and gates. 50% resistance to all
    - Max gathering groups change from 5 - 60 to 1 - 50
    - Max auto gathering group size change from 50 - 600 to 50 - 1000
    - Max attack group size can be set to 1000.
    - This can be reach by raising "[Attack Meter] Threshold Multiplier" and "Max Auto gathering group size". (e.g 10 Threshold Multiplier and 100 max group size)
    - Debug remote attack group calls now accept size
    - Added a debug scenario to test the races on different maps.
    - Code file license changed from MIT to GNU LGPLv3

    - Fix an issue where WEST and EAST attack group processing position get swapped.
Version: 1.10.7
Date: 2021-12-17

    - Fix a crash when enemy couldn't build a new base in base build processor.
Version: 1.10.6
Date: 2021-12-15

    - Fix a crash when LevelManager.get_calculated_current_level() > max_level in level slider.
Version: 1.10.5
Date: 2021-11-30

    - Added "bob-pierce" and "plasma" resistance support for enemy units, max 90% (Bob Warfare resistance support)
    - Adjusted K2's 'radioactive' and 'kr-explosion' resistance from max 95% to max 90%
    - Adjusted initial values for above resistances
Version: 1.10.4
Date: 2021-11-27

    - Fixed a crash when build group called start_moving()
Version: 1.10.3
Date: 2021-11-26

    - Time based custom attack group starts at level 3, instead of level 2.  Gives more time to prepare for roboports.
    - Changed [Time Based Attack] Add points by % default from 3% to 2% per minute.

    - Fixed a crash on data load when "enable vanilla biter" is off.
    - added biter_factions to incompatible.  It created enemy forces which are not compatible with this mod's logic processors.
Version: 1.10.2
Date: 2021-11-21

    - Fixed setting sorting
    - Fixed XP curve to use 1.10.1 value.  It used incorrect values.
Version: 1.10.1
Date: 2021-11-18

    - Change XP Curve: {1, 3, 6, 10, 15, 21, 28, 38, 50, 70, 100, 150, 210, 280, 360, 450, 550, 700, 1000}

    - Fix start up crash when land-mine modified by other mods. New change will only change land-mine with base-game property.
Version: 1.10.0
Date: 2021-11-14

    - ---- Vanilla enemy enhancement ----
    - Added combat robots, construction robot, logistic robot as flyer units for enemy race.
    - combat robots are high damage single target units.  Start to spawn after 0.4 evolution factor.
    - construction robot handles building proxy spawners.
    - logistic robot handles the dropship role.
    - bump units' HP and resistances to be similar to other races.
    - Vanilla race now support all features of ERM mod.
    - ---- / Vanilla enemy enhancement ----
    - ---- Time base custom attack group ----
    - Add time base custom attack group. Default: ON
    - Points will add to attack meter every minute. Starting at level 2.
    - Default setting is adding 3% of next attack wave points,  Configurable in settings.
    - ---- / Time base custom attack group ----
    - ---- Krastorio 2 Compatibility update (requires 1.2+) ----
    - Creep generation support for new races
    - Custom bullets can now hit air, regardless of settings.
    - ---- / Krastorio 2 Compatibility update ----
    - ---- Leveling changes ----
    - level 2 and level 3 are no longer based on evolution factor
    - Adjust level up evolution points to {0.25, 0.7, 1.5, 3, 8, 15, 24, 36, 50, 70, 100, 150, 210, 280, 360, 450, 550, 700, 1000}
    - Added Setting: Level Curve Multiplier (1x - 10x). This setting multiplies the evolution points required to level.  Enemy may level up too quick for some big mods.
    - @IMPORTANT: You should consider changing "Level Curve Multiplier" to higher value if you are using expensive recipes or any big mod that makes weapon tech harder to research like Space Exploration.
    - @IMPORTANT: Space Exploration players may want to use 3 - 5 as level curve multiplier, since weapon tech upgrades require more advanced recipe and longer to craft.
    - ---- / Leveling Changes ----
    - Added 4 races split in map generation setting. You can up to have 4 races on nauvis.
    - Added orphan wandering unit cleaner when the save loads.  Orphan units are bad for performance. This can be triggered from GUI.

    - Biters now support movement speed multiplier.
    - Cap attack meter at 999999.
    - Remove small-biter/splitter and small-worm-turret from spawning in custom attack group.
    - Construction/Logistic bots only get HP buff on max level 15 (150) & 20 (200).
    - Removed /ERM_levelup command
    - Change AttackGroupProcessor to generate a group in 20 seconds regardless of the group size, instead of 5 units/s
    - replace land-mine stunt effect with 50% movement speed.
    - Added 3 and 4 to "Attack group forming interval"  option list.  Default changed from 5 mins to 3 mins

    - Fixed a crash when unsupported enemies structure try to level up.  Using unsupported enemies may override ERM features.
    - Fixed a crash in attack_group_chunk_processor when spawnable_chunk index is nil for a surface
Version: 1.9.3
Date: 2021-11-07

    - Fixed a crash in attack_group_chunk_processor when attackable_chunk index is nil for a surface
Version: 1.9.2
Date: 2021-10-27

    - Fixed an issue which custom attack group only spawn at first SE attackable planet.
Version: 1.9.1
Date: 2021-10-23

    - Disable debug mode XD
Version: 1.9.0
Date: 2021-10-23

    - Custom attack group can now spawn in Space Exploration planets!
    - Custom attack group is now out of beta.
    - Enemy running/flying speed can now adjustable in startup setting.
    - Added a detailed window to show race's additional information and adjustment
    - Added total units and structures kill count to detailed window
    - Enemy level can be overide in detail UI window.

    - Added default values to setting tooltips
    - Add remote function to generate dropship attack group
    - Significantly lower level up evolution points to { 10, 20, 35, 50, 65, 80, 100, 150, 200, 250, 300, 400, 500, 650, 800, 1000, 1250 }

    - Fixed a bug in attack group chunk processor's find_spawn_location()
    - Fixed an attack meter points calculation inaccuracy issue.
Version: 1.8.1
Date: 2021-09-30

    - "[Precision Strike] Enable for flying squad" is now default to ON
    - Added 90% option to Attack groups spawn chances.

    - Added all variants of "Natural_Evolution_Enemies" to incompatible list.
Version: 1.8.0
Date: 2021-09-30

    - Reworked custom attack group spawning position selection workflow.
    - Reworked custom attack group attack target selection workflow.
    - Added enemy damage modifier.
    - Base/Cold/Explosive/Armoured Biters now supports damage leveling. Good luck.

    - Changed Build style default setting to "Build a town".
    - Removed group_gathering_time_change. Use game default instead

    - Fix global erm cache clean up function
    - Fix negative and positive race using opposite coordinates.
Version: 1.7.3
Date: 2021-09-14

    - Fix an incorrect assignment of a cache value
Version: 1.7.2
Date: 2021-09-14

    - Fix a game start up crash when Bio Industry enables.
Version: 1.7.1
Date: 2021-09-03

    - Turn off debug mode.
Version: 1.7.0
Date: 2021-09-03

    - ---- Dropship Squad ----
    - Can be enable in setting and set its chance to spawn. Default to ON.
    - Flying units squad must be enabled as prerequisite.
    - Each unit cost 150 attack meter points.  Default 3000 points spawns 20 units.
    - ---- END Dropship Squad ----
    - ---- Squad Subtype: Precision Strike ----
    - The squads with this subtype go straight to inner base targets, bypass your defense.
    - Targets the area within 32 radius of any rocket-silo, artillery or mining-drill.
    - Dropship squad is always a precision strike squad.
    - Flying units squad can be configure to have this feature.  Default to OFF.
    - Strike location will be warn on the map. This option can be turn off.  Default to ON.
    - ---- END Squad Subtype: Precision Strike Squad ----
    - ---- FREE FOR ALL MODE [Experimental feature] ----
    - /ERM_FFA command enable Free For All mode.  It can be toggle on and off.  Enemy races will fight each other.
    - This feature may have performance implication.
    - This command limits to max enemy level 5 and 10.
    - High level units are excluded because unit spawns quicker than they die and cause performance issue.
    - Not recommend to use FFA on a death world map. They may never stop fighting and kill your performance.
    - ** Player building health and enemy damage will need to re-balance for this mode in a future release **
    - ---- END FREE FOR ALL MODE ----

    - Special attack group can now configure to spawn at certain interval (1, 2, default 5, 10) minutes.
    - 2 race split: the no man's land gap increase to 4 chunks to cope for free for all mode
    - Disabled health regen for all units. Turrets and spawners are not units and not affected.
    - Add 1.25x to max health for units to balance the health regen when race level > 1.
    - construction & logistic robots immune fire when player defence enhance option is on.
    - change how spawn chance are calculated for flying units squads
    - change attack meter threshold to use a formular based on max group size, instead of fixed value.
    - Special attack group capped at 600 units.

    - Fix incorrect GUI display regards to enemy map setting.
    - Fix "replace enemy" which always replace enemy with biters, introduced by last release.
Version: 1.6.0
Date: 2021-08-12

    - Compatibility for New Game Plus.
    - When the game resets, attack meter also reset.
    - When "reset evolution factor" is checked, level, tier and evolution points are preserved. Evolution factor and attack meter get reset.
    - When "reset research" is checked, everything reset.
    - Add "level up accelerator" option to accelerate level up by killing unit and turrets. It defaults to ON.
    - The point is based on 1% of spawner destroy factor for each killed units and 10% of spawner destroy factor for each killed turrets
    - level 10+ should play with "level up accelerator" enabled.

    - New experience curve for Level 4 - 20.
    - Evolution points: 12, 25, 45, 70, 115, 175, 250, 350, 450, 600, 750, 900, 1200, 1600, 2200, 3000, 4000
    - New XP curve takes less evolution points to reach level 10 and takes more evolution points to reach higher levels.
    - Added level 15 to max level option.
    - Level up checks once every hour instead of every 30mins.
Version: 1.5.6
Date: 2021-08-05

    - Added new color to unit_tint for terran unit coloring in map mode.
    - Changed max value for max autonomous group from 50 to 60
    - Changed max value for max group size from 250 to 600
    - Changed max value for attach group threshold from 6000 to 30000

    - Fixed a crash when replacing enemy biters which are belong to other force that is not named "enemy".  Those units now replace with "enemy" force.
Version: 1.5.5
Date: 2021-08-03

    - Re-added onUnitFinishGathering event.  Some build groups used max group size, instead of max build group size
    - Optimize custom attack helper

    - Fix an issue which "Full Expansion" does not work under new cron.
Version: 1.5.4
Date: 2021-08-02

    - Fix a crash when restoring Queues during on_load event
Version: 1.5.3
Date: 2021-08-02

    - Surface processor now based on surface name, instead of index.
    - Removed onUnitFinishGathering event. It may not needed.

    - Attempt to fix Multiplayer Desync by converting local variable to global
Version: 1.5.2
Date: 2021-07-30

    - Fix a crash on custom attack group spawn when command center does not exists. It now picks other unit spawners if that's the case.
Version: 1.5.1
Date: 2021-07-29

    - Added remote.call('enemy_race_manager', 'generate_attack_group', RACE_NAME, number_of_units)
    - e.g remote.call('enemy_race_manager', 'generate_attack_group', 'erm_zerg', 100)
    - Added remote.call('enemy_race_manager', 'generate_flying_group', RACE_NAME, number_of_units)
    - e.g remote.call('enemy_race_manager', 'generate_flying_group', 'erm_zerg', 50)

    - Fix Space exploration crash when creating a new map
Version: 1.5.0
Date: 2021-07-28

  Major Features:
    - Beta Features: Attack Meters, default ON
    - Beta Features: Flying Squads, default OFF.  It will be ON by default once attack meter is out of beta.
    - [Attack Meters] Enemy will send out an army to attack when a killed threshold is reached.  The check happens every 5mins
    - [Attack Meters] tallies kill points every minutes. 1 point for unit, 10 points for turret, 50 points for spawners.
    - [Attack Meters] The default threshold is around 3000 points(~150 units) per attack group. The threshold is configurable.
    - [Attack Meters] Each unit in attack group consumes 20 points.
    - [Flying Squads] enemy may send out dedicate flying attackers to your base.
    - [Flying Squads] Each unit in flying attack group consumes 75 points. Team size is around 40 units in default threshold.
    - This only supports planet nauvis at the moment.  Not yet compatible in other planet for SE.

    - Cron Processor, to divide large tasks into smaller tasks. e.g custom base builder and custom attack group builder

    - Change weapon rig bullet and shotgun-shell function to accept custom ammo-category
    - Double unit group gathering time.
    - Refactor custom attack handling.
    - Removed "sync with enemy" button from GUI.  Use /ERM_levelup command to change level instead.

    - Fixed race tier was not changed when using level up by command.
    - Fixed a crash caused by forces cache.
    - Fixed a crash by marking 'bobenemies' to be incompatible.
Version: 1.4.2
Date: 2021-07-16

    - Destroy all units which are not in unit_group. This should preserve building groups.
Version: 1.4.1
Date: 2021-07-16

    - Re-add the process of destroying units. It will only destroy unit when unit level is higher than race's level.
Version: 1.4.0
Date: 2021-07-16

    - Removed the process of destroying units when a race level up. It was unnecessary clean to them up.
    - Wall immune poison and fire, 66% resistance to others
Version: 1.3.1
Date: 2021-07-11

    - Fix a crash when unit_group was not found during the execution of build style: Command Center Expansion.
Version: 1.3.0
Date: 2021-07-10

  Major Features:
    - Added support functions for ERM_RedArmy 0.1.0 beta release.

    - You can adjust the split position for 2 way split. e.g you can adjust the split at -10000 on the y-axis.
    - Add a button to kill all enemy units with 32 radius to kill immortal units

    - Added 64 tiles no one's land for 2 way split. This will only apply to newly generated chunk or new map
    - All GUI buttons required admin role.
    - Various code optimizations

    - Attempt to fix run away high level units during the map processing. Some players are seeing immortal (high level) units.
    - Fix a compatibility crash with combat-mechanics-overhaul
    - Fix an issue which surface processor use random race when using replace race button.

    - Added animation rig to change animation prototypes.
    - Added weapon rig to change weapon / ammo prototypes.
Version: 1.2.0
Date: 07. 03. 2021

    - Air unit now use "flying-layer", instead of hardcoded layer-33.  This enhance collision layer compatibility with Space Exploration
    - ** ERM Race mods also need to update

    - Fix projectile collision issue for air units with Industrial Revolution 2 mod
Version: 1.1.0
Date: 07. 01. 2021

    - Explosion from explosive projectiles can now hit air by default.  This includes explosive cannon shells and artillery shells.
    - Air units use "layer-33" as air-unit collision layer.  This requires race mod updates.
    - Add an option to toggle whether ground weapon can hit air units. This includes shotgun pellets, tank-shells, grenades, poison capsule and slowdown capsule. Disable by default.
Version: 1.0.0
Date: 06. 27. 2021

    - --- Added a command to override race level ---
    - Usage: /ERM_levelup erm_vanilla,5
    - Overriding level must be equal or higher than the level calculated by evolution points.

    - Removed level up by tech command
    - Code Refactor.
Version: 0.7.0
Date: 04. 02. 2021

  Major Features:
    - ----- Support one force per surface/planet. -----
    - ######## How this works:
    - 1) When a new surface is discovered, a race is assigned to the surface randomly
    - 2) Spawners or worms are generated when new chunk is mapped. The mod checks their force.
    - 3) If it's not same as the assigned force, the mod replace the entity with random spawner/worm from assigned race.
    - ########
    - UI shows the surface you are on and which race(s) are on that surface.
    - When you are using "one force per surface", replacing a race changes the race of the surface you are on.
    - ------ Expansion Build Style ----
    - The enemy builds one building each time in base game. Enemy base expansion is a very slow process.  This feature changes that.
    - There are 4 build styles.
    - 1. "Default", The enemy builds one building each time a build request triggers using base game logic. It's very slow expansion.
    - 2. "Command Center Expand", If the enemy build group builds a command center, it expands  build formation setting. Otherwise, it builds single building. This occasionally expand 7 extra builds.
    - 3. "Build A Town", The enemy build group builds based on the formation setting
    - 4. "Fully Expand", When the group builds, all units in the group builds using build formation setting. This always expands based on the size of the build group. The default map setting is 20.
    - When the unit group doesn't have enough units to build a full formation, command center always builds first, next is support building and then turrets.
    - Build style and build formation options can be change during runtime.

    - --- Major Performance Improvement ---
    - Large base builder group will have 75% chance to break down to a smaller settle size group. Large base builder groups seems have significantly performance penalty.
    - The extra units become attack group.  If it did not break down, the large base builder group would also become attack group

    - Corpse stay 15 minutes by default, instead of 5 minutes. Its setting range is now 1 - 60.
    - Add info icon to settings and setting description update
    - 2 races split is now an option in "Enemy Mapping Method", instead of checkbox.  Please select "2 races split" before continue your save.
    - Buffed base game rails resistance.
    - Remove Rampant from dependency blocker.  It seems work with default settings.  However, its changes only apply to "enemy" force. I did not test with its new biters. Enabling them may have unexpected results.
    - A lot of changes and performance tweaks made for terrain (1.1.0),protoss (1.4.0) and zerg (1.4.0) race mod. Please update those too!

    - Fix a crash by removing force and race_settings when an ERM race mod has disabled.
Version: 0.6.1
Date: 03. 27. 2021

    - Fixed a crash when Krastorio2 loads before this mod.  Improved it with ignore_collision_for_area_damage in data-updates.lua
    - Fixed a crash in command ERM_LevelUpWithTech.  Marked as deprecated for next release.
Version: 0.6.0
Date: 03. 26. 2021

    - Add support for Cold Biter and Explosive Biter
    - All biters support leveling.
    - Override their resistances
    - They don't regenerate health to balance their overpower attacks
    - [Cold Biter]
    - Cold always 95, physical 75, fire/explosion -100 - -50, laser/acid -50 - 50
    - [Explosive Biter]
    - Fire/explosion always 95, physical 75, cold -100 - -50, laser/acid -50 - 50

    - Fix a crash when visit other planet / surfaces in Space Exploration
Version: 0.5.0
Date: 03. 20. 2021

    - Compatible with Armoured Biters mod
    - All armoured snappers and snapper spawner supports leveling.
    - Max health stacks with Armoured Biter settings. Health @ Level 10 is very close to original health.
    - Override Armoured Biters settings to align with this mod's resistances and health regen standard.
    - Most snappers have 80 elemental and 90 physical resistance.
    - Leviathan snappers have 80 elemental and 95 physical resistance.

    - Buffed vanilla worm and health
    - Buffed vanilla biter physical resistance
    - Tweaked resistance function. Max resistance @ level 12, instead of level 10.

    - Fix vanilla biters not showing up when using "2 Ways Race Placement"
    - Fix enemy only show in positive axis when using same race for both positive and negative axis with "2 Ways Race Placement"
Version: 0.4.0
Date: 02. 14. 2021

    - Added new mod setting to toggle enhanced vanilla defenses, enabled by default
    - Buff car health (750), resistance and damage (1.5x).
    - Buff tank resistances and damage (2x).
    - Buff stone wall health (500) and resistances.
    - Buff spidertron resistance.
    - Buff impact resistance for all vehicles to 90/50.
    - Buff bot health from 100 to 200, resistances to 75%

    - Gun turret HP buff now controls with enhance vanilla defenses setting.
    - Armors resistances buff now controls with enhance vanilla defenses setting.
    - Explosive rockets AOE can now hit air
    - Units are fully heal in 2 minutes.
    - Buildings are fully heal in 5 minutes.

    - Fix existing enemies are wiped when the level difficulty setting changed from higher to lower for an existing save.
    - Fix a crash after disable vanilla biter and they level up on existing map.
    - Z and P are required to update 1.3.0 for above bugfix to work.
Version: 0.3.3
Date: 02. 02. 2021

    - Change max unit attack range for default to 14.  So that gun turrets can hit them with 2 layers of walls.
Version: 0.3.2
Date: 31. 01. 2021

    - Add an option to select max unit attack range for units that uses maximum range. Default is 16. Advanced is 20.

    - Early game leveling should be a lot slower now.
    - Change level 2 and 3's evolution factor value. {0.4, 0.8}
    - Change level 4 and 5 base on hidden evolution value.
    - New hidden evolution level values are {40, 80, 120, 160, 200, 250, 300, 350, 400, 500, 600, 700, 900, 1100, 1350, 1750, 2500}
    - Change Armor resistances to resists all damage types.
    - Buff gun turret HP from 400 to 800.
Version: 0.3.1
Date: 30. 01. 2021

    - Fix "Enable 2 Ways Race Placement" trigger.
Version: 0.3
Date: 29. 01. 2021

    - Added support to change max groups and max group size for map settings.
    - Added race placement grouping, supports 2 races on nauvis

    - Improves entity placement in map_processor and replacement_processor
    - Force set friend handles in force helper.
    - Default max group changed from 30 to 15. (performance improvement)
    - Default max group size changed from 200 to 100. (performance improvement)
    - Building on_biter_base_built event should now match race level.
    - Improve translations

    - Replace with buildings from correct race when the enemy base expands.  Autoplace spawned building from other races.
    - Fix remote call fetching incorrect unit tier / level
    - Fix evolution point calculation for gui
Version: 0.2.1
Date: 03. 01. 2021

    - Enable vanilla biter by default
    - Change description in info.json
Version: 0.2.0
Date: 03. 01. 2021

    - Add GUI to view evolution points, sync evolution point or replace enemy
    - Add level support for vanilla biters

    - Changed unit naming convention from '-' to '/'.
    - Tuned Evolution level.
Version: 0.1.0
Date: 26. 12. 2020

    - 2 difficulty levels (normal: 10, advanced: 20)
    - First 5 level is tied to force's evolution factor
    - The next 15 level is tied to force's hidden evolution factors (time, pollution and kill spawner)
    - Manage new race as new enemy force. Each race has its own force statistics
    - New races may have up to 3 tiers of unit-spawners and turrets
    - Artillery-Shell damage bonus now is part of infinite stronger-explosive upgrade.
    - Enemy level processor, handles leveling up enemy
    - Enemy map processor, handles replacing enemy entity with new level
    - Enemy replacement processor, handles replacing existing enemy entity with new race