Initial commit

This commit is contained in:
2026-02-28 14:00:45 -06:00
commit 16d3170787
1134 changed files with 589134 additions and 0 deletions

View File

@@ -0,0 +1,894 @@
<?xml version="1.0" ?>
<Equations>
<!--
Do we have some structure here already
AND
Are we not maxed out
SCALE UP BY
Chokepoint status
Income
Distance from max potential base level
Need to reduce maintaince tax
-->
<Needs_Groundbase_Upgrade>
(Variable_Target.GroundbaseLevel > 0.0)
*
(Variable_Target.MaxGroundbaseLevel != Variable_Target.GroundbaseLevel)
*
(
4.0 * (Variable_Target.Hints.Chokepoint)
+
2.0 * Variable_Target.BaseIncomeNBTP
+
1.0 * (Variable_Target.MaxGroundbaseLevel - Variable_Target.GroundbaseLevel)
+
4.0 * Function_Is_Connected_To_Enemy.Evaluate
)
/
7.0
</Needs_Groundbase_Upgrade>
<!--
Bring this into line with ground base component building (since they share the infrastructure category)
AND
Do we already have an initial base (handled by another goal)
AND
Zero out desire when defending the home planet (template change isn't enough)
AND
Are we not already maxed out
AND
Scale by relative economic worth
AND EITHER
lift a tech upgrade purchase dependency OR offensive space production dependency
if this is a location with a ground research facility
OR
If we're badly blocked on space production
OR
If we don't need a tech upgrade dependency lifted, scale desire by:
if this is a chokepoint planet
by likely purchase needs (high tech can only be bought at high level bases)
by how far we are from maxing out base upgrades
UNUSED:
Require the starbase upgrade boost for unblocking tech to be on the highest level system.
*
(Variable_Target.StarbaseLevelUnnormalized == Variable_Self.MaxStarbaseLevelUnnormalized)
-->
<Needs_Starbase_Upgrade>
(Variable_Target.StarbaseLevel > 0.0)
*
(Variable_Target.MaxStarbaseLevel != Variable_Target.StarbaseLevel)
*
((Variable_Target.GroundbaseLevel > Variable_Target.StarbaseLevel) + (Variable_Target.MaxStarbaseLevel >= Variable_Target.MaxGroundbaseLevel))
*
(
15.0 * (1 - Function_Can_Build_Offensive_Space.Evaluate)
+
(1.0 - Function_Need_Tech_Upgrade_Unblocked.Evaluate)
+
(1.0 - Function_Hutts_Need_Tech_Upgrade_Unblocked.Evaluate)
*
(
10.0 * (Variable_Target.Hints.Chokepoint + Variable_Target.Hints.PriorityTarget)
+
10.0 * (Variable_Target.MaxStarbaseLevel - Variable_Target.StarbaseLevel)
+
5.0 * Function_Is_Connected_To_Enemy.Evaluate
+
2.0 * Function_Needs_Better_Buying_Capability_Space.Evaluate
)
)
</Needs_Starbase_Upgrade>
<!-- This desire is used by things that can improve STARBASE LEVEL.
does the Empire want to upgrade tech (including the death star)
and we're not at tech 5 yet
but we're unable
-->
<Need_Tech_Upgrade_Unblocked>
Function_Empire_Should_Upgrade_Tech.Evaluate
*
Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility"}
*
(5.0 > Variable_Self.TechLevel)
*
(1.0 - Variable_Self.CanAdvanceTech)
</Need_Tech_Upgrade_Unblocked>
<Hutts_Need_Tech_Upgrade_Unblocked>
Function_Hutts_Should_Upgrade_Tech.Evaluate
*
Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility"}
*
(5.0 > Variable_Self.TechLevel)
*
(1.0 - Variable_Self.CanAdvanceTech)
</Hutts_Need_Tech_Upgrade_Unblocked>
<!-- Determine if this target planet needs to better assist production.
If we prefer having a higher ratio of level X starbases to this many planets controlled,
AND
This planet is level X-1
OR
...
-->
<Needs_Better_Buying_Capability_Space>
12 * ((0.60 - (Variable_Self.NumStarbaseOfLevel {Parameter_Level = 2} / Variable_Self.PlanetsControlledUnnormalized)) > 0) *
(Variable_Target.StarbaseLevelUnnormalized == 1.0)
+
10 * ((0.50 - (Variable_Self.NumStarbaseOfLevel {Parameter_Level = 3} / Variable_Self.PlanetsControlledUnnormalized)) > 0) *
(Variable_Target.StarbaseLevelUnnormalized == 2.0)
+
8 * ((0.40 - (Variable_Self.NumStarbaseOfLevel {Parameter_Level = 4} / Variable_Self.PlanetsControlledUnnormalized)) > 0) *
(Variable_Target.StarbaseLevelUnnormalized == 3.0)
+
6 * ((0.30 - (Variable_Self.NumStarbaseOfLevel {Parameter_Level = 5} / Variable_Self.PlanetsControlledUnnormalized)) > 0) *
(Variable_Target.StarbaseLevelUnnormalized == 4.0)
</Needs_Better_Buying_Capability_Space>
<!-- Currently, the Empire has steep requirements before it can build a single
offensive space unit.
-->
<Can_Build_Offensive_Space>
(Variable_Self.IsFaction {Parameter_Faction = "Rebel"})
+
(Variable_Self.IsFaction {Parameter_Faction = "Hutts"})
+
(Variable_Self.IsFaction {Parameter_Faction = "Empire"})
*
(
(Variable_Self.HasStarbaseOfLevel {Parameter_Level = 3, Parameter_Count = 1}
+
Variable_Self.HasStarbaseOfLevel {Parameter_Level = 2, Parameter_Count = 1} *
(Variable_Self.TechLevel >= 2))
>= 1
)
</Can_Build_Offensive_Space>
<!-- SCALE DOWN as we improve to the desired ratio of structures per planet
PLUS
Boost if we need to upgrade the base
-->
<Need_Light_Vehicle_Factory>
20 * clamp(0.5 - (Variable_Self.StructureCount {Parameter_Type = "E_Ground_Light_Vehicle_Factory",
Parameter_Type = "R_Ground_Light_Vehicle_Factory",
Parameter_Type = "H_Ground_Factory",
Parameter_Only_Consider_Complete = 1.0} /
Variable_Self.PlanetsControlledUnnormalized), 0.1, 0.5)
*
(
Function_Needs_Groundbase_Upgrade.Evaluate
+
(3.0 * Variable_Target.StructureCount {Parameter_Type = "E_Ground_Light_Vehicle_Factory",
Parameter_Type = "R_Ground_Light_Vehicle_Factory",
Parameter_Type = "H_Ground_Factory",
Parameter_Only_Consider_Complete = 1.0})
)
*
(3 > Variable_Target.StructureCount {Parameter_Type = "E_Ground_Light_Vehicle_Factory",
Parameter_Type = "R_Ground_Light_Vehicle_Factory",
Parameter_Type = "H_Ground_Factory",
Parameter_Only_Consider_Complete = 1.0})
*
(1.0 - Function_Need_Tech_Upgrade_Unblocked.Evaluate)
*
(Function_Should_Save_For_Desirable_Structures.Evaluate == 0)
</Need_Light_Vehicle_Factory>
<!-- Same kind of deal as vehicle factory -->
<Need_Barracks>
20 * clamp(0.5 - (Variable_Self.StructureCount {Parameter_Type = "E_Ground_Barracks",
Parameter_Type = "R_Ground_Barracks",
Parameter_Type = "H_Ground_Barracks",
Parameter_Only_Consider_Complete = 1.0} /
Variable_Self.PlanetsControlledUnnormalized), 0.1, 0.5)
*
(
Function_Needs_Groundbase_Upgrade.Evaluate
+
(3.0 * Variable_Target.StructureCount {Parameter_Type = "E_Ground_Barracks",
Parameter_Type = "R_Ground_Barracks",
Parameter_Type = "H_Ground_Barracks",
Parameter_Only_Consider_Complete = 1.0})
)
*
(2 > Variable_Target.StructureCount {Parameter_Type = "E_Ground_Barracks",
Parameter_Type = "R_Ground_Barracks",
Parameter_Type = "H_Ground_Barracks",
Parameter_Only_Consider_Complete = 1.0})
*
(1.0 - Function_Need_Tech_Upgrade_Unblocked.Evaluate)
*
(Function_Should_Save_For_Desirable_Structures.Evaluate == 0)
</Need_Barracks>
<!-- SCALE DOWN as we improve to the desired ratio of structures per planet
PLUS
Boost if we need to upgrade the base
PLUS
Bonus for stacking
-->
<Need_Heavy_Vehicle_Factory>
(
25 * clamp(0.4 - (Variable_Self.StructureCount {Parameter_Type = "E_Ground_Heavy_Vehicle_Factory",
Parameter_Type = "R_Ground_Heavy_Vehicle_Factory",
Parameter_Type = "H_Ground_Factory",
Parameter_Only_Consider_Complete = 1.0} /
Variable_Self.PlanetsControlledUnnormalized), 0.1, 0.4)
+
3 * Function_Needs_Groundbase_Upgrade.Evaluate
+
(5.0 * Variable_Target.StructureCount {Parameter_Type = "E_Ground_Heavy_Vehicle_Factory",
Parameter_Type = "R_Ground_Heavy_Vehicle_Factory",
Parameter_Type = "H_Ground_Factory",
Parameter_Only_Consider_Complete = 1.0})
)
*
(3 > Variable_Target.StructureCount {Parameter_Type = "E_Ground_Heavy_Vehicle_Factory",
Parameter_Type = "R_Ground_Heavy_Vehicle_Factory",
Parameter_Type = "H_Ground_Factory",
Parameter_Only_Consider_Complete = 1.0})
*
(1.0 - Function_Need_Tech_Upgrade_Unblocked.Evaluate)
</Need_Heavy_Vehicle_Factory>
<!-- Provided we're the Empire faction
SCALE DOWN as we improve to the desired ratio of structures per planet
PLUS
Boost if we need to upgrade the base
PLUS
Bonus for stacking
-->
<Need_Advanced_Vehicle_Factory>
Variable_Self.IsFaction {Parameter_Faction = "Empire"}
*
(
25 * clamp(0.4 - (Variable_Self.StructureCount {Parameter_Type = "E_Ground_Advanced_Vehicle_Factory",
Parameter_Only_Consider_Complete = 1.0} /
Variable_Self.PlanetsControlledUnnormalized), 0.1, 0.4)
+
5 * Function_Needs_Groundbase_Upgrade.Evaluate
+
(5.0 * Variable_Target.StructureCount {Parameter_Type = "E_Ground_Advanced_Vehicle_Factory", Parameter_Only_Consider_Complete = 1.0})
)
*
(3 > Variable_Target.StructureCount {Parameter_Type = "E_Ground_Advanced_Vehicle_Factory", Parameter_Only_Consider_Complete = 1.0})
*
(1.0 - Function_Need_Tech_Upgrade_Unblocked.Evaluate)
</Need_Advanced_Vehicle_Factory>
<!-- The first research facility is built via the MajorItem template purchase scheme
If we don't yet have a research facility
Use the home planet, if it can max the starbase at a decent level
otherwise, choose a planet with decent defenses that can max the starbase at a decent level
-->
<Need_First_Research_Facility>
(Variable_Self.IsFaction {Parameter_Faction = "Empire"}
*
(1 - Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility", Parameter_Count = 1})
*
(
1
+
Function_Defense_Level.Evaluate
+
(Function_Is_Connected_To_Enemy.Evaluate == 0)
+
Function_Is_Home_Planet.Evaluate
+
Variable_Target.FriendlyForce.SpaceTotal
+
Variable_Target.FriendlyForce.GroundTotal
)
)
+
(Variable_Self.IsFaction {Parameter_Faction = "Hutts"}
*
(1 - Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Count = 1})
*
(
1
+
Function_Defense_Level.Evaluate
+
(Function_Is_Connected_To_Enemy.Evaluate == 0)
+
Function_Is_Home_Planet.Evaluate
+
Variable_Target.FriendlyForce.SpaceTotal
+
Variable_Target.FriendlyForce.GroundTotal
)
)
</Need_First_Research_Facility>
<!-- Subsequent research facilities are built under the Infrastructure budget according to this formula:
Provided we're the Empire faction
AND
We have enough planets to care about tech
SCALE DOWN as we improve to the desired number of structures
BIG BOOST if we have a high tech desire and no research facilities
SCALE UP if this planet has good defense
PLUS Boost if we need to upgrade the base
-->
<Need_Research_Facility>
(
Variable_Self.IsFaction {Parameter_Faction = "Empire"}
*
(1 - Variable_Target.HasStructure {Parameter_Type = "E_Ground_Research_Facility"})
*
Function_Has_Enough_Bases_For_Tech.Evaluate
*
(Variable_Target.MaxStarbaseLevel == 5)
*
(
20 * (1 - (Variable_Self.StructureCount {Parameter_Type = "E_Ground_Research_Facility", Parameter_Only_Consider_Complete = 1.0} / 2))
+
10 * Function_Empire_Should_Upgrade_Tech.Evaluate *
(1 - Variable_Self.HasStructure {Parameter_Type = "E_Ground_Research_Facility", Parameter_Count = 1})
+
3 * Function_Defense_Level.Evaluate
+
3 * Function_Needs_Groundbase_Upgrade.Evaluate
)
)
+
(
Variable_Self.IsFaction {Parameter_Faction = "Hutts"}
*
(1 - Variable_Target.HasStructure {Parameter_Type = "H_Ground_Advanced_Technologies_Facility"})
*
Function_Has_Enough_Bases_For_Tech.Evaluate
*
(Variable_Target.MaxStarbaseLevel == 5)
*
(
20 * (1 - (Variable_Self.StructureCount {Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Only_Consider_Complete = 1.0} / 2))
+
10 * Function_Hutts_Should_Upgrade_Tech.Evaluate *
(1 - Variable_Self.HasStructure {Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Count = 1})
+
3 * Function_Defense_Level.Evaluate
+
3 * Function_Needs_Groundbase_Upgrade.Evaluate
)
)
</Need_Research_Facility>
<!-- Flat, low desire
Boost if we need to upgrade the base
-->
<Need_Comm_Array>
(1 - Variable_Target.HasStructure {Parameter_Type = "H_Ground_Communications_Array"})
*
(
2
+
5 * clamp(Function_Needs_Groundbase_Upgrade.Evaluate, 0.0, 1.0)
)
*
(1.0 - Function_Need_Tech_Upgrade_Unblocked.Evaluate)
*
(Function_Should_Save_For_Desirable_Structures.Evaluate == 0)
</Need_Comm_Array>
<!--
Provided we have enough planets to care about officers
SCALE DOWN
as we improve to the desired number of structures
PLUS
Boost if we need to upgrade the base
-->
<Need_Officer_Academy>
40 * clamp(0.25 - (Variable_Self.StructureCount {Parameter_Type = "E_Ground_Officer_Academy",
Parameter_Type = "R_Ground_Officer_Academy",
Parameter_Only_Consider_Complete = 1.0} /
Variable_Self.PlanetsControlledUnnormalized), 0.05, 0.25)
*
(Variable_Self.PlanetsControlledUnnormalized > 4)
*
(
Function_Needs_Groundbase_Upgrade.Evaluate
+
(3 * Variable_Target.StructureCount {Parameter_Type = "E_Ground_Officer_Academy",
Parameter_Type = "R_Ground_Officer_Academy",
Parameter_Only_Consider_Complete = 1.0})
)
*
(2.0 > Variable_Target.StructureCount {Parameter_Type = "E_Ground_Officer_Academy",
Parameter_Type = "R_Ground_Officer_Academy",
Parameter_Only_Consider_Complete = 1.0})
*
(1.0 - Function_Need_Tech_Upgrade_Unblocked.Evaluate)
*
(Function_Should_Save_For_Desirable_Structures.Evaluate == 0)
</Need_Officer_Academy>
<!-- Determines whether the player owns a level 5 starbase
Only kicks in once planet ownership is above a threshold
*
(Variable_Self.PlanetsControlled >= 0.25)
-->
<No_Level_5_Starbase>
(Variable_Self.HasStarbaseOfLevel {Parameter_Level = 5, Parameter_Count = 1} == 0.0)
</No_Level_5_Starbase>
<!-- Does this planet have a starbase already? -->
<Needs_Initial_Starbase>
50.0 *
(1.0 - clamp(Variable_Self.PlanetsControlled - 0.33, 0.0, 1.0)) *
(Variable_Target.StarbaseLevel == 0.0) *
(Variable_Target.MaxStarbaseLevel > 0.0) *
(Variable_Target.EnemyForce.HasSpaceForce == 0)
</Needs_Initial_Starbase>
<!-- Does this planet have a groundbase already? This now builds a barracks.
High base desire
AND
Only needed if we don't yet have a groundbase
AND
Only needed if we can build a groundbase
AND
Wait until the starbase has been built, if one can be
-->
<Needs_Initial_Groundbase>
50.0
*
(1.0 - clamp(Variable_Self.PlanetsControlled - 0.33, 0.0, 1.0))
*
(Variable_Target.GroundbaseLevel == 0.0)
*
(Variable_Target.MaxGroundbaseLevel > 0)
*
((Variable_Target.StarbaseLevel > 0) + (Variable_Target.MaxStarbaseLevel == 0.0))
</Needs_Initial_Groundbase>
<!--
Build a cantina wherever we can provided we don't have tech constraints
Max 1 cantina per cantina supporting planet
-->
<Needs_Cantina>
Function_Has_Enough_Bases_For_Tech.Evaluate
*
(1.0 - Function_Need_Tech_Upgrade_Unblocked.Evaluate)
*
(Variable_Target.StructureCount {Parameter_Type = "Ground_Cantina_E",
Parameter_Type = "Ground_Cantina_R",
Parameter_Only_Consider_Complete = 1.0} == 1.0)
*
50.0
</Needs_Cantina>
<!-- Desire to build a mine.
desirability is like arenas
PLUS
bonus for stacking mining facilities (effects are cumulative)
AND
Maximum four per planet
AND
Must have basic build facilities first
SoaFE: Removed
*
(Function_Should_Save_For_Desirable_Structures.Evaluate == 0)
Otherwise AI doesn't like to build more than 1 Mining Facility per planet.
-->
<Needs_Mining_Facility>
(
(
30.0
*
(1.0 + Variable_Target.IncomeUnnormalized * Variable_Target.IncomeUnnormalized / 250000.0)
+
10 * (0.5 > (Variable_Self.StructureCount {Parameter_Type = "Empire_Ground_Mining_Facility_GC", Parameter_Type = "Empire_Ground_Mining_Facility_GC_Unlim", Parameter_Type = "Empire_Mineral_Extractor_GC", Parameter_Type = "Rebel_Ground_Mining_Facility_GC", Parameter_Type = "Rebel_Ground_Mining_Facility_GC_Unlim", Parameter_Type = "Rebel_Mineral_Extractor_GC", Parameter_Type = "Hutts_Ground_Mining_Facility_GC", Parameter_Type = "Hutts_Ground_Mining_Facility_GC_Unlim", Parameter_Type = "Hutt_Mineral_Extractor_GC", Parameter_Only_Consider_Complete = 1.0} / Variable_Self.PlanetsControlledUnnormalized))
)
*
clamp(Function_Defense_Level.Evaluate - 1, 0.0, 2.0)
*
((Variable_Target.MaxStructureSlotsUnnormalized / 2.0) > Variable_Target.StructureCount {Parameter_Type = "Empire_Ground_Mining_Facility_GC",
Parameter_Type = "Empire_Ground_Mining_Facility_GC_Unlim",
Parameter_Type = "Empire_Mineral_Extractor_GC",
Parameter_Type = "Rebel_Ground_Mining_Facility_GC",
Parameter_Type = "Rebel_Ground_Mining_Facility_GC_Unlim",
Parameter_Type = "Rebel_Mineral_Extractor_GC",
Parameter_Type = "Hutts_Ground_Mining_Facility_GC",
Parameter_Type = "Hutts_Ground_Mining_Facility_GC_Unlim",
Parameter_Type = "Hutt_Mineral_Extractor_GC",
Parameter_Only_Consider_Complete = 1.0})
+
50.0
*
(Variable_Self.HasStructure {Parameter_Type = "Empire_Ground_Mining_Facility_GC",
Parameter_Type = "Empire_Ground_Mining_Facility_GC_Unlim",
Parameter_Type = "Empire_Mineral_Extractor_GC",
Parameter_Type = "Rebel_Ground_Mining_Facility_GC",
Parameter_Type = "Rebel_Ground_Mining_Facility_GC_Unlim",
Parameter_Type = "Rebel_Mineral_Extractor_GC",
Parameter_Type = "Hutts_Ground_Mining_Facility_GC",
Parameter_Type = "Hutts_Ground_Mining_Facility_GC_Unlim",
Parameter_Type = "Hutt_Mineral_Extractor_GC",
Parameter_Only_Consider_Complete = 1.0} == 0.0)
)
*
(0.33 + 0.67 * (Function_Is_Connected_To_Enemy.Evaluate == 0))
</Needs_Mining_Facility>
<!--
Is this a chokepoint planet
AND
Do we need info
AND
Do we have enough slots to afford one for a scanner
AND
Have we already addressed production bottleneck issues
-->
<Needs_Scanner>
Variable_Target.OpenStructureSlots
*
(Function_Defense_Level.Evaluate > 5)
*
(Variable_Target.Hints.Chokepoint != 0)
*
Function_Global_Scout_Need.Evaluate
*
(Variable_Target.MaxStructureSlotsUnnormalized >=2)
*
Function_Has_Enough_Bases_For_Tech.Evaluate
*
(0 >= Function_Needs_Better_Buying_Capability_Space.Evaluate)
*
(Function_Should_Save_For_Desirable_Structures.Evaluate == 0)
</Needs_Scanner>
<!--
*
(1.0 - Function_Need_Tech_Upgrade_Unblocked.Evaluate)
-->
<Needs_Hutt_Palace>
Function_Has_Enough_Bases_For_Tech.Evaluate
*
(1.0 - Function_Need_Tech_Upgrade_Unblocked.Evaluate)
*
50.0
</Needs_Hutt_Palace>
<!--
are we Rebels?
AND
Is the system reasonably defended
AND
make sure it's not a chokepoint system (would waste a slot there)
AND
scale by how many open slots we have
AND
We can't really use more than 2 total of this structure
AND
Have we already addressed production bottleneck issues
AND
Big Bonus if we have no structure of this type yet
-->
<Needs_Ground_Infiltrator_Facility>
(
5.0
*
(Variable_Self.IsFaction {Parameter_Faction = "Rebel"})
*
Function_Defense_Level.Evaluate
*
Function_Has_Enough_Bases_For_Tech.Evaluate
+
5.0 * Variable_Target.HasStructure {Parameter_Type = "Ground_Infiltrator_Facility"}
)
*
(2.0 > Variable_Target.StructureCount {Parameter_Type = "Ground_Infiltrator_Facility", Parameter_Only_Consider_Complete = 1.0})
*
(Function_Should_Save_For_Desirable_Structures.Evaluate == 0)
</Needs_Ground_Infiltrator_Facility>
<!--
Require at least a certain number of bases, so that unit production
won't be severly interrupted during tech production.
Edited to scale better with different galaxy sizes. Used to require a fixed number of bases.
More than one planet controlled
AND
More than 10% of the galaxy controlled
AND
More than 75% of owned planets have a level 1 starbase
AND
More than 75% of owned planets have a level 1 groundbase
AND
At least one level 3 starbase
-->
<Has_Enough_Bases_For_Tech>
(Variable_Self.PlanetsControlledUnnormalized > 1)
*
(Variable_Self.NumStarbaseOfLevel {Parameter_Level = 1} >= (0.75 * Variable_Self.PlanetsControlledUnnormalized))
*
(Variable_Self.NumGroundbaseOfLevel {Parameter_Level = 1} >= (0.25 * Variable_Self.PlanetsControlledUnnormalized))
</Has_Enough_Bases_For_Tech>
<!--
Are we the Empire
AND
We're not sure to win anyway
AND
Do we not yet have the Death Star
AND
Do we have enough bases to afford keeping a base tied up for a lengthy tech upgrade
AND
Is it possible to immediately purchase the next tech item without pause using only X% of the gross income
Or
Is it mostly already paid for by the MajorItem slush fund
UNUSED:
Scale with income relative to max possible income
Variable_Self.GrossIncomeNBTF
We haven't been attacked in a while OR
The enemy is ahead in tech OR -WAITING ON Enemy.TechLevel
We have enough systems that it couldn't hurt to have one tied up in tech OR
We're so far ahead in space forces that it can't hurt
Game.FriendlyForce.SpaceTotalUnnormalized - Game.EnemyForce.SpaceTotalUnnormalized
-->
<Empire_Should_Upgrade_Tech>
(Variable_Self.IsFaction {Parameter_Faction = "Empire"})
*
(1.0 - Variable_Self.HasUnit{Parameter_Type = "Death_Star_II", Parameter_Count = 1, Parameter_Only_Consider_Complete = 1.0})
*
Function_Has_Enough_Bases_For_Tech.Evaluate
*
(
clamp(Function_Has_Enough_Space_Force_Globally.Evaluate +
(Game.Timeline > Variable_Self.TechLevel) * (Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility"}) ,
0.0, 1.0)
*
(
(1 - Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility"}) *
((0.7 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "E_Ground_Research_Facility"}) +
(0.9 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "E_Ground_Research_Facility", Parameter_Category = AIGoalCategoryType[MajorItem]}) >= 1.0)
+
Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility"} *
(Variable_Self.TechLevel == 1) *
((0.7 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Primary_Hyperdrive"}) +
(0.9 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Primary_Hyperdrive", Parameter_Category = AIGoalCategoryType[MajorItem]}) >= 1.0)
+
(Variable_Self.TechLevel == 2) *
((0.7 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Shield_Gen"}) +
(0.9 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Shield_Gen", Parameter_Category = AIGoalCategoryType[MajorItem]}) >= 1.0)
+
(Variable_Self.TechLevel == 3) *
((0.7 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Superlaser_Core"}) +
(0.9 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Superlaser_Core", Parameter_Category = AIGoalCategoryType[MajorItem]}) >= 1.0)
+
(Variable_Self.TechLevel == 4) *
((0.7 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Durasteel"}) +
(0.9 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Durasteel", Parameter_Category = AIGoalCategoryType[MajorItem]}) >= 1.0)
)
+
(Variable_Self.TechLevel == 5) *
((0.7 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "Death_Star_II"}) +
(0.9 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "Death_Star_II", Parameter_Category = AIGoalCategoryType[MajorItem]}) >= 1.0)
)
</Empire_Should_Upgrade_Tech>
<!-- Do we want to switch to the "tech up" template?
If we want to upgrade tech
AND
We need a research facility
OR
We're able to advance the tech level
OR
we're tech 5 and we want to buy the death star
-->
<Empire_Tech_Trigger>
Function_Empire_Should_Upgrade_Tech.Evaluate
*
(
(
(1 - Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility"})
+
Variable_Self.CanAdvanceTech
+
(Variable_Self.TechLevel == 5) * (1.0 - Variable_Self.HasUnit{Parameter_Type = "Death_Star_II"})
)
>= 1.0
)
</Empire_Tech_Trigger>
<!-- an untrigger for the tech template at a higher budgetFractionToBuild threshold,
because the template is having trouble sticking.
Untrigger if:
We're less than level 5 AND we already have a research facility AND we can't advance tech level
OR
We really can no longer afford to both pay for this item and maintain other activities
OR
We already have the Death Star
-->
<Empire_Tech_Untrigger>
(5 > Variable_Self.TechLevel) *
Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility", Parameter_Only_Consider_Complete = 1} *
(1.0 - Variable_Self.CanAdvanceTech)
+
(
(1 - Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility", Parameter_Only_Consider_Complete = 1}) *
(Variable_Self.BudgetFractionToBuild{Parameter_Type = "E_Ground_Research_Facility"} >= 0.8)
+
Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility", Parameter_Only_Consider_Complete = 1} *
(Variable_Self.TechLevel == 1) *
(Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Primary_Hyperdrive"} >= 0.8)
+
Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility", Parameter_Only_Consider_Complete = 1} *
(Variable_Self.TechLevel == 2) *
(Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Shield_Gen"} >= 0.8)
+
Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility", Parameter_Only_Consider_Complete = 1} *
(Variable_Self.TechLevel == 3) *
(Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Superlaser_Core"} >= 0.8)
+
Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility", Parameter_Only_Consider_Complete = 1} *
(Variable_Self.TechLevel == 4) *
(Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Durasteel"} >= 0.8)
+
Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility", Parameter_Only_Consider_Complete = 1} *
(Variable_Self.TechLevel == 5) *
(Variable_Self.BudgetFractionToBuild{Parameter_Type = "Death_Star_II"} >= 0.80)
)
+
Variable_Self.HasUnit{Parameter_Type = "Death_Star_II", Parameter_Only_Consider_Complete = 1}
</Empire_Tech_Untrigger>
<!-- SoaFE Test -->
<Hutts_Should_Upgrade_Tech>
(Variable_Self.IsFaction {Parameter_Faction = "Hutts"})
*
Function_Has_Enough_Bases_For_Tech.Evaluate
*
(
clamp(Function_Has_Enough_Space_Force_Globally.Evaluate +
(Game.Timeline > Variable_Self.TechLevel) * (Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility"}) ,
0.0, 1.0)
*
(
(1 - Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility"}) *
((0.7 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "H_Ground_Advanced_Technologies_Facility"}) +
(0.9 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Category = AIGoalCategoryType[MajorItem]}) >= 1.0)
+
Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility"} *
(Variable_Self.TechLevel == 1) *
((0.7 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_2"}) +
(0.9 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_2", Parameter_Category = AIGoalCategoryType[MajorItem]}) >= 1.0)
+
(Variable_Self.TechLevel == 2) *
((0.7 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_3"}) +
(0.9 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_3", Parameter_Category = AIGoalCategoryType[MajorItem]}) >= 1.0)
+
(Variable_Self.TechLevel == 3) *
((0.7 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_4"}) +
(0.9 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_4", Parameter_Category = AIGoalCategoryType[MajorItem]}) >= 1.0)
+
(Variable_Self.TechLevel == 4) *
((0.7 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_5"}) +
(0.9 >= Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_5", Parameter_Category = AIGoalCategoryType[MajorItem]}) >= 1.0)
)
)
</Hutts_Should_Upgrade_Tech>
<!-- Do we want to switch to the "tech up" template?
If we want to upgrade tech
AND
We need a research facility
OR
We're able to advance the tech level -->
<Hutts_Tech_Trigger>
Function_Hutts_Should_Upgrade_Tech.Evaluate
*
(
(
(1 - Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility"})
+
Variable_Self.CanAdvanceTech
)
>= 1.0
)
</Hutts_Tech_Trigger>
<!-- An untrigger for the tech template at a higher budgetFractionToBuild threshold,
because the template is having trouble sticking.
Untrigger if:
We're less than level 5 AND we already have a research facility AND we can't advance tech level
OR
We really can no longer afford to both pay for this item and maintain other activities-->
<Hutts_Tech_Untrigger>
(5 > Variable_Self.TechLevel) *
Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Only_Consider_Complete = 1} *
(1.0 - Variable_Self.CanAdvanceTech)
+
(
(1 - Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Only_Consider_Complete = 1}) *
(Variable_Self.BudgetFractionToBuild{Parameter_Type = "H_Ground_Advanced_Technologies_Facility"} >= 0.8)
+
Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Only_Consider_Complete = 1} *
(Variable_Self.TechLevel == 1) *
(Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_2"} >= 0.8)
+
Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Only_Consider_Complete = 1} *
(Variable_Self.TechLevel == 2) *
(Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_3"} >= 0.8)
+
Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Only_Consider_Complete = 1} *
(Variable_Self.TechLevel == 3) *
(Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_4"} >= 0.8)
+
Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Only_Consider_Complete = 1} *
(Variable_Self.TechLevel == 4) *
(Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_5"} >= 0.8)
)
</Hutts_Tech_Untrigger>
<Can_Reclaim_Excess_MajorItem_Budget>
(Variable_Self.ActiveGoals {Parameter_Category = AIGoalCategoryType[MajorItem]} > 0)
</Can_Reclaim_Excess_MajorItem_Budget>
<Can_Afford_Steal_Tech>
(Variable_Self.CreditsUnnormalized > 1000)
*
((Variable_Self.NetIncomeUnnormalized > 500) + (Variable_Self.CreditsUnnormalized > 2500))
</Can_Afford_Steal_Tech>
<Should_Save_For_Desirable_Structures>
(Variable_Target.GroundBaseLevelUnnormalized > 1.0)
*
(
(Variable_Self.HasTechToProduce {Parameter_Type = "E_Ground_Heavy_Vehicle_Factory", Parameter_Type = "R_Ground_Heavy_Vehicle_Factory", Parameter_Type = "H_Ground_Factory"})
*
(Function_Need_Heavy_Vehicle_Factory.Evaluate > 10.0)
+
(Variable_Self.HasTechToProduce {Parameter_Type = "E_Ground_Advanced_Vehicle_Factory"})
*
(Function_Need_Advanced_Vehicle_Factory.Evaluate > 10.0)
+
(Variable_Self.HasTechToProduce {Parameter_Type = "Ground_Empire_Hypervelocity_Gun", Parameter_Type = "Ground_Hutts_Hypervelocity_Gun", Parameter_Type = "Ground_Ion_Cannon"})
*
(Function_Needs_Weapon.Evaluate > 15.0)
+
(Variable_Self.HasTechToProduce {Parameter_Type = "E_Ground_Base_Shield_740", Parameter_Type = "E_Ground_Base_Shield_740", Parameter_Type = "H_Ground_Base_Shield_740"})
*
(Function_Needs_Base_Shield.Evaluate > 15.0)
+
(Variable_Self.HasTechToProduce {Parameter_Type = "E_Galactic_Turbolaser_Tower_Defenses", Parameter_Type = "R_Galactic_Turbolaser_Tower_Defenses", Parameter_Type = "H_Galactic_Turbolaser_Tower_Defenses"})
*
(Function_Needs_Turbolasers.Evaluate > 15.0)
)
</Should_Save_For_Desirable_Structures>
<Num_Planets_Controlled>
Variable_Self.PlanetsControlledUnnormalized
</Num_Planets_Controlled>
<Num_Enemy_Space_Territories>
Variable_Human.SpaceDefendedPlanets * Variable_Human.PlanetsControlledUnnormalized
</Num_Enemy_Space_Territories>
<Num_Enemy_Land_Territories>
Variable_Human.GroundDefendedPlanets * Variable_Human.PlanetsControlledUnnormalized
</Num_Enemy_Land_Territories>
<Enemy_Planets_Controlled>
Variable_Human.PlanetsControlledUnnormalized
</Enemy_Planets_Controlled>
</Equations>