More Enemies


Simple idea of just having more enemies, with larger and/or more enemy attack groups. Comes with five preset difficulties: Easy(0.1), Vanilla(1), Vanilla+(1.75), Hard(4), and Insanity(11). Each added setting can be configured independently of the selected difficulty to personal taste. Engineer beware - they come for you.

Tweaks
14 days ago
2.0
2.91K
Enemies

i [Todo: Implement this] Suggestion: add 1.25 and 1.5 options

a month ago

I’m someone who just wants a small change – not anything extreme. +75% still feels like too much.

a month ago
(updated a month ago)

Also, how does this mod work exactly? Does it respect your map generation settings? I see a bunch of options in the start-up and map settings for this mod, but I’m not sure how it works, for vanilla+ mode, in relation to the map generation enemy settings.

And does this send out random raids despite enemy nests not being within your pollution cloud?

a month ago

Hello!

The static difficulties are just preset "guides" if you will. That is, you can set the difficulty to whatever preset you would like, including Vanilla, and independently change the startup parameters from their default values.

This is to say, if the startup settings are not changed, but the planetary difficulty is different from Vanilla, the difficulty will apply to the given setting (either multiply or divide the given setting by the numerical value/modifier of the difficulty); however, if you specifically alter a startup setting from its default value, that value will be honored irrespective of the selected difficulties numerical value/modifier.

Put another way, you could set the difficulty to Vanilla+/Hard/Insanity/Easy/or just leave it at Vanilla, but scale the startup settings up/down/to whatever you personally want completely independently of the selected difficulty.

Additionally, in regards to the random raids you mentioned: yes, it can send out proactive attack groups, but they are fully configurable. That is, they cannot even be given the chance to form until 45 minutes have passed, but it is configurable; they can also be disabled completely per surface; have their spawn probability tweaked per surface; how frequently they can even attempt to form; as well as you can define in the startup settings entities that they should ignore altogether when looking for a target (e.g. rails, power-lines, etc.).

And lastly, there are runtime settings with a default value of 1, but range from 0 to 11, to dynamically increase or decrease the amount of times an entity is cloned relative to the currently selected difficulty for the given surface, without needing to restart the game.

That all said, explicit user-defined difficulty settings like you suggest, as opposed to/in addition to the present static ones, are on my list of features to implement for the future.

Hope this helps/answers some of your questions - feel free to ask away if you're still curious or unsure about something!

a month ago

Thank you! Currently I’m using both Enemy AI Enhancement by IamfindingNemo and More Enemies by TheEckelmonster a.k.a. you.
https://mods.factorio.com/mod/smart-enemy-ai

How does this mod differ from that mod? From my understanding, that mod has some other features, like research pressure, and your mod increases the size of attacking biter groups, whereas that mod doesn’t – I believe.

Do you recommend using both simultaneously?

Also, if I only set the difficulty to Vanilla+ but don’t touch anything else, what are the specific changes this mod makes? As far as I understand, it’d just add random small raids as well as 75% more enemies to groups that attack from polluted nests, right?

a month ago
(updated a month ago)

I am not entirely familiar with Enemy AI Enhancement.

However, from a cursory look/inspection, it would appear that ME and EAE approach the enemy issue from the perspective of quantity vs. quality; this is to say, ME increase challenge by simply numerically scaling the amount of enemies you potentially will face - whereas it would appear the EAE doesn't numerically change the amount of enemies, but rather makes them smarter.

My initial impression is that they should be completely compatible, and likely would work in tandem well (assumed, but yet unconfirmed).

As far as using simultaneously, my initial determination would come down to how do you personally want to scale your enemies? Do want a logistical meat-grinder where supplying your walls/turrets with ammo is the challenge? Or the challenge is an ongoing ever increasing strategic arms-race of identifying weak points in your defensive grid before the enemy does?


tldr; Do you want lots of simple/dumb enemies swarming your walls? Do you want the usual amount of enemies, but making strategic tactical decisions dynamically? Or both a high volume of enemies, and for them to be more intelligent?

This is my understanding at the moment at least. Am downloading EAE presently to test and report back with more precise findings.


In regards to how a selection of Vanilla+ would affect spawners and enemy cloning, it would make the following changes (assuming Vanilla+ for Nauvis, and all other settings remain at default):

spawners: biter and spitter

  • max_count_of_owned_units = 7 * 1.75 = 12.25 -> 12
  • max_friends_around_to_spawn = 5 * 1.75 = 8.75 -> 8
  • max_defensive_friends_around_to_spawn = 5 * 1.75 = 8.75 -> 8
  • max_spawning_cooldown = 360 / 1.75 = 205.714... -> 205 ticks (3.1467 seconds)
  • min_spawning_cooldown = 150 / 1.75 -> 85.714... = 85 ticks (1.417 seconds)

individual unit cloning:

  • (clone_settings[source] * selected_difficulty.value) * (use_evolution_factor ? evolution_multiplier : 1
  • evolution_multiplier formula = ((selected_difficulty.value ^ (evolution_factor / (selected_difficulty.value ^ (evolution_factor / selected_difficulty.value)))) * evolution_factor)

e.g. source = "unit" or "unit-group", selected_difficulty.value = 1.75, assuming evolution_factor of 0.5, the overall amount of times a given unit would be cloned when it initially spawns, or the unit group it is a part is created/deployed successfully:

  • 1 * 1.75 * (true and ((1.75 ^ (0.5 / (1.75 ^ (0.5 / 1.75)))) * 0.5)) = 1.1106 -> 1

at evolution factor 0.5, each enemy unit would be cloned just once; as it evolution_factor scales up to say 0.95 though, the result would be as follows:

  • 1 * 1.75 * (true and ((1.75 ^ (0.95 / (1.75 ^ (0.95 / 1.75)))) * 0.95)) = 2.46127 -> 2

And for for reference, even at max (1.0) evolution, on Vanilla+, without adjusting the runtime clone unit/unit-group setting, the max amount of times any individual unit would be cloned is floor(2.6276) = 2

Lastly, in regards to the proactive attack groups, Vanilla+ would have the following effects:

  • limit = math_min(max_unit_group_size, 12 + selected_difficulty.value + selected_difficulty.value * selected_difficulty.radius_modifier * (1 + selected_difficulty.radius_modifier * math_random(1 + selected_difficulty.value)))
  • limit is the maximum size/number of units allowed in a proactive attack group
  • max_probability = 1 - (1/selected_difficulty.value)
  • attack_group_probability_modifiers[surface_name] = runtime configurable setting per surface, default value of 1

max_probability = max_probability * (attack_group_probability_modifiers[surface_name] or 0)
local threshold = max_probability * evolution_factor
selected_difficulty.retries = selected_difficulty.retries or math_floor((selected_difficulty.value * 3) ^ 0.5)

local proceed = false
rand = math_random()
for i = 1, selected_difficulty.retries, 1 do
if (rand < threshold) then
proceed = true
break
end
threshold = threshold ^ (0.95 * (1 - math_max((1 - selected_difficulty.inverse_value) * evolution_factor, 1.0)))
end

if (not proceed) then return end

The above is simply to say, that attack groups will not try to process until after the configured peace time has elapsed; after which, based on the periodicity defined by the max/min attack group processing delay settings, an attack group will attempt to form for a given surface based on the above formulas/probability gate.

Even if an attack group finds a valid chunk to target, and it finds appropriate enemies to send, if the evolution factor is low, the difficulty is low, or the math.random calls roll poorly, then the attack group will be skipped and retried again later. The effect of which is few sporadic proactive attacks of small size , that grows in frequency, volume, and intensity as evolution progressively increases.


Apologies for the wall of text - hoping it answers some of your questions.

As always, keep them coming if you have any more, or if there's anything else you would like more detail on!


Edit(s): formatting

New response