434 lines
17 KiB
XML
434 lines
17 KiB
XML
<?xml version="1.0" ?>
|
|
<Equations>
|
|
<!--================== Budgeting for the Empire ==================-->
|
|
<!-- Fairly balanced with emphasis on offense -->
|
|
<!-- Information budget kept low since probe droids are cheap -->
|
|
|
|
<!-- Snowball budget - more money for offense as galactic domination comes closer -->
|
|
<BasicEmpireOffensiveBudgetAllocation>
|
|
5.0
|
|
+
|
|
(10.0 * Variable_Self.PlanetsControlled)
|
|
+
|
|
(6.0 * (1.0 - Function_Has_Enough_Space_Force_Globally.Evaluate))
|
|
</BasicEmpireOffensiveBudgetAllocation>
|
|
|
|
<!-- Defensive budget
|
|
We only care about land defenses if we have enough space forces
|
|
AND
|
|
SCALE if special structure defenses are needed
|
|
ADD baseline amount for tactical defense spending
|
|
-->
|
|
<BasicEmpireDefensiveBudgetAllocation>
|
|
Function_Has_Enough_Space_Force_Globally.Evaluate
|
|
*
|
|
(
|
|
8.0 * Function_Can_Build_Defensive_Structures.Evaluate * (1.0 - Function_Has_Enough_Defensive_Structures.Evaluate)
|
|
+
|
|
2.0
|
|
)
|
|
</BasicEmpireDefensiveBudgetAllocation>
|
|
|
|
|
|
<Can_Build_Defensive_Structures>
|
|
(
|
|
Variable_Self.IsFaction {Parameter_Faction = "Empire"} *
|
|
(Variable_Self.TechLevel >= 2) *
|
|
Variable_Self.HasGroundbaseOfLevel {Parameter_Level = 2, Parameter_Count = 1}
|
|
)
|
|
+
|
|
(
|
|
Variable_Self.IsFaction {Parameter_Faction = "Rebel"} *
|
|
(Variable_Self.TechLevel >= 2) *
|
|
Variable_Self.HasGroundbaseOfLevel {Parameter_Level = 2, Parameter_Count = 1}
|
|
)
|
|
+
|
|
(
|
|
Variable_Self.IsFaction {Parameter_Faction = "Hutts"} *
|
|
(Variable_Self.TechLevel >= 2) *
|
|
Variable_Self.HasGroundbaseOfLevel {Parameter_Level = 2, Parameter_Count = 1}
|
|
)
|
|
>= 1
|
|
</Can_Build_Defensive_Structures>
|
|
|
|
<Defensive_Structure_Count>
|
|
Variable_Self.StructureCount { Parameter_Type = "E_Ground_Base_Shield_740"
|
|
,Parameter_Type = "R_Ground_Base_Shield_740"
|
|
,Parameter_Type = "H_Ground_Base_Shield_740"
|
|
,Parameter_Type = "E_Galactic_Turbolaser_Tower_Defenses"
|
|
,Parameter_Type = "R_Galactic_Turbolaser_Tower_Defenses"
|
|
,Parameter_Type = "H_Galactic_Turbolaser_Tower_Defenses"
|
|
,Parameter_Type = "Ground_Ion_Cannon"
|
|
,Parameter_Type = "Ground_Empire_Hypervelocity_Gun"
|
|
,Parameter_Type = "Ground_Hutts_Hypervelocity_Gun"
|
|
,Parameter_Type = "E_Ground_Magnepulse_Cannon"
|
|
,Parameter_Type = "Ground_Gravity_Generator"
|
|
}
|
|
</Defensive_Structure_Count>
|
|
|
|
<!-- Have we met the desired ratio of defensive structures to planets controlled?
|
|
-->
|
|
<Has_Enough_Defensive_Structures>
|
|
(0.3 - (Function_Defensive_Structure_Count.Evaluate / Variable_Self.PlanetsControlledUnnormalized ))
|
|
> 0.0
|
|
</Has_Enough_Defensive_Structures>
|
|
|
|
<!-- Increase with tech level: higher tech units mostly need high level bases.
|
|
Also increase with maintenance: bases prevent maintenance costs
|
|
Decrease as bases are maxed out.
|
|
|
|
Note that The Major Item funds are diverted to Infrastructure if we are unable to tech up but want to.
|
|
Infrastructure money should then be spent on upgrading the highest level starbase, lifting the dependency.
|
|
-->
|
|
<BasicEmpireInfrastructureBudgetAllocation>
|
|
1.1
|
|
*
|
|
(2 + 0.5 * (Variable_Self.TechLevel) - Variable_Self.MaxedStarbases - Variable_Self.MaxedGroundbases)
|
|
*
|
|
(1.0 + Variable_Self.Maintenance)
|
|
*
|
|
(1.0 + 2.0 * (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"} / Variable_Self.PlanetsControlledUnnormalized)))
|
|
+
|
|
6 * (1 - Function_Can_Build_Offensive_Space.Evaluate)
|
|
+
|
|
10 * Function_Need_Tech_Upgrade_Unblocked.Evaluate
|
|
+
|
|
10 * ((Variable_Self.HasStructure {Parameter_Type = "E_Ground_Light_Vehicle_Factory"} == 0) +
|
|
(Variable_Self.HasStructure {Parameter_Type = "E_Ground_Barracks"} == 0) +
|
|
(Variable_Self.HasStructure {Parameter_Type = "Empire_Ground_Mining_Facility_GC"} == 0) +
|
|
(Variable_Self.HasStructure {Parameter_Type = "Empire_Ground_Mining_Facility_GC_Unlim"} == 0) +
|
|
(Variable_Self.HasStructure {Parameter_Type = "Empire_Mineral_Extractor_GC"} == 0))
|
|
</BasicEmpireInfrastructureBudgetAllocation>
|
|
|
|
<!-- Based on average age of scouted information -->
|
|
<BasicEmpireInformationBudgetAllocation>
|
|
0.5 * Function_Global_Scout_Need.Evaluate
|
|
</BasicEmpireInformationBudgetAllocation>
|
|
|
|
<!-- Receive a trickle of funds so that eventually, a major purchase is likely
|
|
Adjust this to control how soon the AI will spend on tech upgrades.
|
|
|
|
Scale this inversely with tech level and posession of the DeathStar (tech 6, in a sense)
|
|
This is needed because during middle and late game, we need more funds for special structures, etc.
|
|
Also, we don't want the AI to rush to max tech.
|
|
|
|
Shut off funds if we're trying to upgrade a base in order to tech
|
|
(the tech was already deemed affordable, and the reserve for it remains in the category)
|
|
|
|
Shut off funds if we're behind in the space race but not behind in the tech race
|
|
|
|
2.0 * Variable_Self.CanAdvanceTech
|
|
-->
|
|
<BasicEmpireMajorItemBudgetAllocation>
|
|
0.8
|
|
*
|
|
(7.0 - Variable_Self.TechLevel
|
|
- Variable_Self.HasUnit{Parameter_Type = "Death_Star_II"}
|
|
- Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility", Parameter_Count = 1})
|
|
*
|
|
(1.0 - Function_Need_Tech_Upgrade_Unblocked.Evaluate)
|
|
*
|
|
clamp(Function_Has_Enough_Space_Force_Globally.Evaluate + (Game.Timeline > Variable_Self.TechLevel), 0.0, 1.0)
|
|
+
|
|
3.0 * (Variable_Self.TechLevel == 5) * (1 - Variable_Self.HasUnit{Parameter_Type = "Death_Star_II"})
|
|
</BasicEmpireMajorItemBudgetAllocation>
|
|
|
|
<!-- Tech Upgrade Purchasing Budgets -->
|
|
<!-- What fraction of the gross budget is required to support building the next tech item
|
|
without pause, plus a small pad to compansate for fluctuations in spending that
|
|
may occur before this perception can compensate.
|
|
|
|
add a buffer large enough to ensure that the upgrade can be afforded, despite cash spikes/drops
|
|
-->
|
|
<TechUpgradeBudgetRequirement>
|
|
(
|
|
(1 - Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility", Parameter_Count = 1}) *
|
|
Variable_Self.BudgetFractionToBuild{Parameter_Type = "E_Ground_Research_Facility"}
|
|
+
|
|
Variable_Self.HasStructure{Parameter_Type = "E_Ground_Research_Facility", Parameter_Count = 1} *
|
|
(Variable_Self.TechLevel == 1) *
|
|
Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Primary_Hyperdrive"}
|
|
+
|
|
(Variable_Self.TechLevel == 2) *
|
|
Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Shield_Gen"}
|
|
+
|
|
(Variable_Self.TechLevel == 3) *
|
|
Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Superlaser_Core"}
|
|
+
|
|
(Variable_Self.TechLevel == 4) *
|
|
Variable_Self.BudgetFractionToBuild{Parameter_Type = "DS_Durasteel"}
|
|
+
|
|
(Variable_Self.TechLevel == 5) *
|
|
Variable_Self.BudgetFractionToBuild{Parameter_Type = "Death_Star_II"}
|
|
*
|
|
1.25
|
|
+
|
|
0.05
|
|
)
|
|
</TechUpgradeBudgetRequirement>
|
|
|
|
<!-- Tech Upgrade Template Budget -->
|
|
<EmpireTechUpgradeOffensiveAllocation>
|
|
0.01
|
|
+
|
|
(1.0 - Function_TechUpgradeBudgetRequirement.Evaluate)
|
|
*
|
|
0.3
|
|
</EmpireTechUpgradeOffensiveAllocation>
|
|
|
|
<EmpireTechUpgradeDefensiveAllocation>
|
|
(1.0 - Function_TechUpgradeBudgetRequirement.Evaluate)
|
|
*
|
|
0.3
|
|
*
|
|
Function_Can_Build_Defensive_Structures.Evaluate
|
|
</EmpireTechUpgradeDefensiveAllocation>
|
|
|
|
<!--
|
|
Variable_Self.CanAdvanceTech
|
|
*
|
|
-->
|
|
<EmpireTechUpgradeMajorItemAllocation>
|
|
Function_TechUpgradeBudgetRequirement.Evaluate
|
|
</EmpireTechUpgradeMajorItemAllocation>
|
|
|
|
<!--
|
|
(1.0 - Variable_Self.CanAdvanceTech) * Function_TechUpgradeBudgetRequirement.Evaluate
|
|
+
|
|
-->
|
|
<EmpireTechUpgradeInfrastructureAllocation>
|
|
(1.0 - Function_TechUpgradeBudgetRequirement.Evaluate)
|
|
*
|
|
0.2
|
|
</EmpireTechUpgradeInfrastructureAllocation>
|
|
|
|
<EmpireTechUpgradeInformationAllocation>
|
|
(1.0 - Function_TechUpgradeBudgetRequirement.Evaluate)
|
|
*
|
|
0.0
|
|
</EmpireTechUpgradeInformationAllocation>
|
|
|
|
<!--================== Budgeting for the Rebels ==================-->
|
|
<!-- Aggressive stance. Low defense and information -->
|
|
|
|
<!-- Snowball budget - more money for offense as galactic domination comes closer -->
|
|
<BasicRebelOffensiveBudgetAllocation>
|
|
7.2 + Variable_Self.PlanetsControlled
|
|
+
|
|
(6.0 * (1.0 - Function_Has_Enough_Space_Force_Globally.Evaluate))
|
|
</BasicRebelOffensiveBudgetAllocation>
|
|
|
|
<!-- Defensive budget increases with proportion of planets that are undefended -->
|
|
<BasicRebelDefensiveBudgetAllocation>
|
|
Function_Has_Enough_Space_Force_Globally.Evaluate
|
|
*
|
|
(
|
|
8.0 * Function_Can_Build_Defensive_Structures.Evaluate * (1.0 - Function_Has_Enough_Defensive_Structures.Evaluate)
|
|
+
|
|
2.0
|
|
)
|
|
</BasicRebelDefensiveBudgetAllocation>
|
|
|
|
<!-- Increase with tech level: higher tech units mostly need high level bases. -->
|
|
<!-- Also increase with low income -->
|
|
<!-- Decrease as bases are maxed out -->
|
|
<BasicRebelInfrastructureBudgetAllocation>
|
|
1.1
|
|
*
|
|
(2 + 0.5 * (Variable_Self.TechLevel) - Variable_Self.MaxedStarbases - Variable_Self.MaxedGroundbases)
|
|
*
|
|
(1.0 + Variable_Self.Maintenance)
|
|
*
|
|
(1.0 + 2.0 * (0.5 > (Variable_Self.StructureCount {Parameter_Type = "Rebel_Ground_Mining_Facility_GC", Parameter_Type = "Rebel_Ground_Mining_Facility_GC_Unlim", Parameter_Type = "Rebel_Mineral_Extractor_GC"} / Variable_Self.PlanetsControlledUnnormalized)))
|
|
+
|
|
10 * ((Variable_Self.HasStructure {Parameter_Type = "R_Ground_Light_Vehicle_Factory"} == 0) +
|
|
(Variable_Self.HasStructure {Parameter_Type = "R_Ground_Barracks"} == 0) +
|
|
(Variable_Self.HasStructure {Parameter_Type = "Rebel_Ground_Mining_Facility_GC"} == 0) +
|
|
(Variable_Self.HasStructure {Parameter_Type = "Rebel_Ground_Mining_Facility_GC_Unlim"} == 0) +
|
|
(Variable_Self.HasStructure {Parameter_Type = "Rebel_Mineral_Extractor_GC"} == 0))
|
|
</BasicRebelInfrastructureBudgetAllocation>
|
|
|
|
<!-- Based on average age of scouted information -->
|
|
<BasicRebelInformationBudgetAllocation>
|
|
0.5 * Function_Global_Scout_Need.Evaluate
|
|
</BasicRebelInformationBudgetAllocation>
|
|
|
|
<!--================== Budgeting for the Hutt Cartel ==================-->
|
|
<!-- Fairly balanced with emphasis on offense -->
|
|
<!-- Information budget kept minimal -->
|
|
|
|
<!-- Snowball budget - more money for offense as galactic domination comes closer -->
|
|
<BasicHuttsOffensiveBudgetAllocation>
|
|
5.0
|
|
+
|
|
(10.0 * Variable_Self.PlanetsControlled)
|
|
+
|
|
(6.0 * (1.0 - Function_Has_Enough_Space_Force_Globally.Evaluate))
|
|
</BasicHuttsOffensiveBudgetAllocation>
|
|
|
|
<!-- Defensive budget
|
|
We only care about land defenses if we have enough space forces
|
|
AND
|
|
SCALE if special structure defenses are needed
|
|
ADD baseline amount for tactical defense spending
|
|
-->
|
|
<BasicHuttsDefensiveBudgetAllocation>
|
|
Function_Has_Enough_Space_Force_Globally.Evaluate
|
|
*
|
|
(
|
|
8.0 * Function_Can_Build_Defensive_Structures.Evaluate * (1.0 - Function_Has_Enough_Defensive_Structures.Evaluate)
|
|
+
|
|
3.0
|
|
)
|
|
</BasicHuttsDefensiveBudgetAllocation>
|
|
|
|
<!-- Increase with tech level: higher tech units mostly need high level bases.
|
|
Also increase with maintenance: bases prevent maintenance costs
|
|
Decrease as bases are maxed out.
|
|
|
|
Note that The Major Item funds are diverted to Infrastructure if we are unable to tech up but want to.
|
|
Infrastructure money should then be spent on upgrading the highest level starbase, lifting the dependency.
|
|
-->
|
|
<BasicHuttsInfrastructureBudgetAllocation>
|
|
1.1
|
|
*
|
|
(2 + 0.5 * (Variable_Self.TechLevel) - Variable_Self.MaxedStarbases - Variable_Self.MaxedGroundbases)
|
|
*
|
|
(1.0 + Variable_Self.Maintenance)
|
|
*
|
|
(1.0 + 2.0 * (0.5 > (Variable_Self.StructureCount {Parameter_Type = "Hutts_Ground_Mining_Facility_GC", Parameter_Type = "Hutts_Ground_Mining_Facility_GC_Unlim", Parameter_Type = "Hutts_Mineral_Extractor_GC"} / Variable_Self.PlanetsControlledUnnormalized)))
|
|
+
|
|
6 * (1 - Function_Can_Build_Offensive_Space.Evaluate)
|
|
+
|
|
10 * Function_Need_Tech_Upgrade_Unblocked.Evaluate
|
|
+
|
|
10 * ((Variable_Self.HasStructure {Parameter_Type = "H_Ground_Factory"} == 0) +
|
|
(Variable_Self.HasStructure {Parameter_Type = "H_Ground_Barracks"} == 0) +
|
|
(Variable_Self.HasStructure {Parameter_Type = "Hutts_Ground_Mining_Facility_GC"} == 0) +
|
|
(Variable_Self.HasStructure {Parameter_Type = "Hutts_Ground_Mining_Facility_GC_Unlim"} == 0) +
|
|
(Variable_Self.HasStructure {Parameter_Type = "Hutts_Mineral_Extractor_GC"} == 0))
|
|
</BasicHuttsInfrastructureBudgetAllocation>
|
|
|
|
<!-- Based on average age of scouted information -->
|
|
<BasicHuttsInformationBudgetAllocation>
|
|
0.3 * Function_Global_Scout_Need.Evaluate
|
|
</BasicHuttsInformationBudgetAllocation>
|
|
|
|
<!-- Receive a trickle of funds so that eventually, a major purchase is likely
|
|
Adjust this to control how soon the AI will spend on tech upgrades.
|
|
|
|
Scale this inversely with tech level and posession of the DeathStar (tech 6, in a sense)
|
|
This is needed because during middle and late game, we need more funds for special structures, etc.
|
|
Also, we don't want the AI to rush to max tech.
|
|
|
|
Shut off funds if we're trying to upgrade a base in order to tech
|
|
(the tech was already deemed affordable, and the reserve for it remains in the category)
|
|
|
|
Shut off funds if we're behind in the space race but not behind in the tech race
|
|
|
|
2.0 * Variable_Self.CanAdvanceTech
|
|
-->
|
|
<BasicHuttsMajorItemBudgetAllocation>
|
|
0.7
|
|
*
|
|
(7.0 - Variable_Self.TechLevel
|
|
- Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Count = 1})
|
|
*
|
|
clamp(Function_Has_Enough_Space_Force_Globally.Evaluate + (Game.Timeline > Variable_Self.TechLevel), 0.0, 1.0)
|
|
</BasicHuttsMajorItemBudgetAllocation>
|
|
|
|
<!-- Tech Upgrade Purchasing Budgets -->
|
|
<!-- What fraction of the gross budget is required to support building the next tech item
|
|
without pause, plus a small pad to compansate for fluctuations in spending that
|
|
may occur before this perception can compensate.
|
|
|
|
add a buffer large enough to ensure that the upgrade can be afforded, despite cash spikes/drops
|
|
-->
|
|
<HuttsTechUpgradeBudgetRequirement>
|
|
(
|
|
(1 - Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Count = 1}) *
|
|
Variable_Self.BudgetFractionToBuild{Parameter_Type = "H_Ground_Advanced_Technologies_Facility"}
|
|
+
|
|
Variable_Self.HasStructure{Parameter_Type = "H_Ground_Advanced_Technologies_Facility", Parameter_Count = 1} *
|
|
(Variable_Self.TechLevel == 1) *
|
|
Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_2"}
|
|
+
|
|
(Variable_Self.TechLevel == 2) *
|
|
Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_3"}
|
|
+
|
|
(Variable_Self.TechLevel == 3) *
|
|
Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_4"}
|
|
+
|
|
(Variable_Self.TechLevel == 4) *
|
|
Variable_Self.BudgetFractionToBuild{Parameter_Type = "Hutt_Tech_5"}
|
|
*
|
|
1.25
|
|
+
|
|
0.05
|
|
)
|
|
</HuttsTechUpgradeBudgetRequirement>
|
|
|
|
<!-- Tech Upgrade Template Budget -->
|
|
<!-- Need to use static values for now. -->
|
|
<!-- HuttsTechUpgradeBudgetRequirement is not a valid perception token and will assert if used! -->
|
|
<HuttsTechUpgradeOffensiveAllocation>
|
|
0.4
|
|
</HuttsTechUpgradeOffensiveAllocation>
|
|
|
|
<!-- Zero is used instead -->
|
|
<HuttsTechUpgradeDefensiveAllocation>
|
|
0.3
|
|
</HuttsTechUpgradeDefensiveAllocation>
|
|
|
|
<HuttsTechUpgradeMajorItemAllocation>
|
|
0.25
|
|
</HuttsTechUpgradeMajorItemAllocation>
|
|
|
|
<HuttsTechUpgradeInfrastructureAllocation>
|
|
0.35
|
|
</HuttsTechUpgradeInfrastructureAllocation>
|
|
|
|
<!-- Zero is used instead -->
|
|
<HuttsTechUpgradeInformationAllocation>
|
|
0.1
|
|
</HuttsTechUpgradeInformationAllocation>
|
|
|
|
<GenericSpaceTargetedOffensiveBudgetAllocation>
|
|
Game.ForceVisibility
|
|
</GenericSpaceTargetedOffensiveBudgetAllocation>
|
|
|
|
<GenericSpaceDefensiveBudgetAllocation>
|
|
0.5
|
|
</GenericSpaceDefensiveBudgetAllocation>
|
|
|
|
<GenericSpaceUntargetedOffensiveBudgetAllocation>
|
|
1.0 - Game.ForceVisibility
|
|
</GenericSpaceUntargetedOffensiveBudgetAllocation>
|
|
|
|
<!-- Used to determine the funds to be spent from the galactic budget on a land tactical game.
|
|
We like to spend more on planets that are:
|
|
valuable
|
|
have a large ground force investment
|
|
have a large ground infrastructure investment
|
|
scale by a magic number
|
|
NOTE: we're not scaling by the number of open build pads, because if we can't build, the
|
|
over-allocated money simply wont be spent.
|
|
-->
|
|
<Land_Tactical_Budget>
|
|
(
|
|
1 * Function_GenericPlanetValue.Evaluate +
|
|
2 * Variable_Target.FriendlyForce.GroundTotal +
|
|
3 * Variable_Target.GroundbaseLevel
|
|
) / 5
|
|
* 2500
|
|
+
|
|
200
|
|
</Land_Tactical_Budget>
|
|
|
|
<Land_Tactical_Budget_Clamped>
|
|
clamp( Function_Land_Tactical_Budget.Evaluate,
|
|
0,
|
|
Variable_Self.CreditsUnnormalized / (Variable_Self.PlanetsControlled + 1)
|
|
)
|
|
</Land_Tactical_Budget_Clamped>
|
|
</Equations> |