Dilvish wrote:Oberlus wrote:Yes. I envision you would need at least two turns to wipe out a system: one to get all pops to 0 and revert them to outposts, one to bombard(remove) the outposts.
One thing to consider is that bombing an outpost to un-owned status is not something that absolutely needs to be a deterministic one-turn operation. Like the fading of Concentration Camp Remnants, it could be a stochastic operation, with some chance of success each turn. Or it could apply a special, which accretes capacity each turn that the planet is not supply-connected to any other planets owned by the same empire (disappearing if it is) and once that capacity reaches a certain point (3,4, whatever) then the outpost becomes an unowned planet. There is a wide variety of ways to make it take more than one turn (which is something that seems desirable to me for such a significant operation).
I would tend to think that the stacking abilities of bombardment units should probably be restricted a bit-- either don't let them combine linearly, or give some chance for groups of bombadiers to take self-induced attrition, or whatever.
I am fine with bombard removing an outpost in one turn. I do believe that bombardment should not be able to take out a populated world in one turn. Unless you truly have enough to glass plain it.
Something like:
Code: Select all
def bombard_kill_count(pop, bombard_parts, exponent=0.02, slope=0.2):
"""
@param pop: current pop of target
@param bombard_parts: number of bombard parts that nominally kill 1 pop.
@param exponent: non-linear diminishing return value.
@param slope: linear limit, should be less then the implied nominal kill 1 pop per part
@return: number of population points are killed
"""
return min(pop, max(pop - pop * (1 - exponent)**bombard_parts, max(1, bombard_parts * slope)))
So this allows for diminishing returns on bombard_parts, until the linear portion kicks in. The linear portion allows for determination of # of parts to one shot bombard_parts = pop / slope.
E.g. planet with 70 pop, if bombarded with 100 bombard parts, would last 2 turns.
planet with 70 pop, if bombarded with 20 bombard parts, would last 8 turns.
Code: Select all
pop=70; arr = []
while pop >0:
pop -= bombard_kill_count(pop, 100,0.02,.2)
arr.append(int(pop))
print arr
[9, 0]
pop=70; arr = []
while pop >0:
pop -= bombard_kill_count(pop, 20,0.02,.2)
arr.append(int(pop))
print arr
[46, 31, 20, 13, 9, 5, 1, 0]
Of course numbers can and should be adjusted.
I kinda like your accreting special idea, I believe one that applies for each bombard_parts used would be interesting.
If it exceeds certain amount(s) it applies special(s) that could:
- prevent re-colonization,
- have influence/ diplomatic cost,
- require a clean-up cost( minus one pop for each count of the special, can be cleaned up by ...).
CC-BY-SA 3.0