1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
from focs._effects import (
AnyEmpire,
Contains,
EffectsGroup,
EmpireHasAdoptedPolicy,
GameRule,
IsSource,
IsTarget,
NamedIntegerLookup,
NoEffect,
OwnedBy,
Planet,
StatisticIf,
System,
WithinStarlaneJumps,
)
MIN_RECOLONIZING_SIZE = 3
MIN_RECOLONIZING_HAPPINESS = 5
IMPOSSIBLY_LARGE_TURN = 2**15
def DESCRIPTION_EFFECTSGROUP_MACRO(desc: str):
return EffectsGroup(description=desc, scope=IsSource, activation=None, effects=NoEffect)
FIGHTER_DAMAGE_FACTOR = GameRule(type=float, name="RULE_FIGHTER_DAMAGE_FACTOR")
PLANET_DEFENSE_FACTOR = GameRule(type=float, name="RULE_SHIP_WEAPON_DAMAGE_FACTOR")
PLANET_SHIELD_FACTOR = GameRule(type=float, name="RULE_SHIP_STRUCTURE_FACTOR")
SHIP_WEAPON_DAMAGE_FACTOR = GameRule(type=float, name="RULE_SHIP_WEAPON_DAMAGE_FACTOR")
SHIP_SHIELD_FACTOR = GameRule(type=float, name="RULE_SHIP_WEAPON_DAMAGE_FACTOR")
SHIP_STRUCTURE_FACTOR = GameRule(type=float, name="RULE_SHIP_STRUCTURE_FACTOR")
SYSTEM_MINES_DAMAGE_FACTOR = GameRule(type=float, name="RULE_SHIP_STRUCTURE_FACTOR")
SUPPLY_DISCONNECTED_INFLUENCE_MALUS = 1
# empire id used for unowned planets/ships - as defined in Universe.cpp(?)
UNOWNED_EMPIRE_ID = -1 # type: ignore[assignment]
MINIMUM_DISTANCE_EMPIRE_CHECK = ~WithinStarlaneJumps(
jumps=NamedIntegerLookup(name="MIN_MONSTER_DISTANCE"),
condition=System & Contains(Planet() & OwnedBy(affiliation=AnyEmpire)),
)
GROWTH_RATE_FACTOR = (
0.1
* (
1 - StatisticIf(float, condition=IsTarget & EmpireHasAdoptedPolicy(name="PLC_NO_GROWTH"))
) # no growth with no-growth policy
* (
1 + 0.5 * StatisticIf(float, condition=IsTarget & EmpireHasAdoptedPolicy(name="PLC_POPULATION"))
) # +50% growth with population policy
)
|