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,532 @@
<?xml version="1.0" ?>
<Equations>
<!-- See if the target system is connected to a system owned by whatever faction I am.
-->
<Is_Connected_To_Me>
Variable_Target.IsConnectedTo {Parameter_Faction = "Empire", Parameter_Attenuator = 0.0} *
Variable_Self.IsFaction {Parameter_Faction = "Empire"}
+
Variable_Target.IsConnectedTo {Parameter_Faction = "Rebel", Parameter_Attenuator = 0.0} *
Variable_Self.IsFaction {Parameter_Faction = "Rebel"}
+
Variable_Target.IsConnectedTo {Parameter_Faction = "Underworld", Parameter_Attenuator = 0.0} *
Variable_Self.IsFaction {Parameter_Faction = "Underworld"}
+
Variable_Target.IsConnectedTo {Parameter_Faction = "Hutts", Parameter_Attenuator = 0.0} *
Variable_Self.IsFaction {Parameter_Faction = "Hutts"}
</Is_Connected_To_Me>
<!-- See if the target system is connected to a system owned by the AI faction's enemy
-->
<Is_Connected_To_Enemy>
((Variable_Target.IsConnectedTo {Parameter_Faction = "Rebel", Parameter_Attenuator = 0.0} +
Variable_Target.IsConnectedTo {Parameter_Faction = "Hutts", Parameter_Attenuator = 0.0} +
Variable_Target.IsConnectedTo {Parameter_Faction = "Underworld", Parameter_Attenuator = 0.0}) *
Variable_Self.IsFaction {Parameter_Faction = "Empire"}
+
(Variable_Target.IsConnectedTo {Parameter_Faction = "Empire", Parameter_Attenuator = 0.0} +
Variable_Target.IsConnectedTo {Parameter_Faction = "Hutts", Parameter_Attenuator = 0.0} +
Variable_Target.IsConnectedTo {Parameter_Faction = "Underworld", Parameter_Attenuator = 0.0}) *
Variable_Self.IsFaction {Parameter_Faction = "Rebel"}
+
(Variable_Target.IsConnectedTo {Parameter_Faction = "Empire", Parameter_Attenuator = 0.0} +
Variable_Target.IsConnectedTo {Parameter_Faction = "Rebel", Parameter_Attenuator = 0.0} +
Variable_Target.IsConnectedTo {Parameter_Faction = "Underworld", Parameter_Attenuator = 0.0}) *
Variable_Self.IsFaction {Parameter_Faction = "Hutts"}
+
(Variable_Target.IsConnectedTo {Parameter_Faction = "Rebel", Parameter_Attenuator = 0.0} +
Variable_Target.IsConnectedTo {Parameter_Faction = "Hutts", Parameter_Attenuator = 0.0} +
Variable_Target.IsConnectedTo {Parameter_Faction = "Empire", Parameter_Attenuator = 0.0}) *
Variable_Self.IsFaction {Parameter_Faction = "Underworld"}) > 0.0
</Is_Connected_To_Enemy>
<!-- Normalizing time since forces were seen relative to 60 seconds
returning 1.0 means we just got recon, 0.0 means recon is older than 60 seconds (and probably useless)
OLD NORMALIZED BY TOTAL TIME OF UNIVERSE VERSION:
0.5 * (1.0 - Variable_Target.EnemyForce.SpaceTotal.TimeLastSeen + 1.0 - Variable_Target.EnemyForce.GroundTotal.TimeLastSeen)
-->
<System_Recon_Relevance>
0.5 * (1.0 - (Variable_Target.EnemyForce.SpaceTotal.TimeLastSeenUnnormalized > 60.0)) * (60.0 - Variable_Target.EnemyForce.SpaceTotal.TimeLastSeenUnnormalized) / 60.0
+
0.5 * (1.0 - (Variable_Target.EnemyForce.GroundTotal.TimeLastSeenUnnormalized > 60.0)) * (60.0 - Variable_Target.EnemyForce.GroundTotal.TimeLastSeenUnnormalized) / 60.0
</System_Recon_Relevance>
<Recent_Conversion>
(1.0 - (Variable_Target.TimeSinceConversion > 60.0)) * (60.0 - Variable_Target.TimeSinceConversion) / 60.0
</Recent_Conversion>
<Recent_Conflict_Space>
(1.0 - (Variable_Target.TimeSinceGroundConflict > 60.0)) * (60.0 - Variable_Target.TimeSinceGroundConflict) / 60.0
</Recent_Conflict_Space>
<Recent_Conflict_Ground>
(1.0 - (Variable_Target.TimeSinceConversion > 60.0)) * (60.0 - Variable_Target.TimeSinceConversion) / 60.0
</Recent_Conflict_Ground>
<!-- This perception seeks to detect situations where our non-pirate opponent has neglected to reinforce a system.
Use this to respond to the enemy amassing all of their forces in one or few systems.
-->
<Is_Neglected_By_My_Opponent_Space>
Variable_Target.IsHumanControlled
*
((Variable_Target.EnemyForce.HasSpaceForce + Variable_Target.EnemyForce.HasGroundForce) > 0)
*
(1.0 - Variable_Target.EnemyForce.SpaceTotalNBPTM)
</Is_Neglected_By_My_Opponent_Space>
<Is_Neglected_By_My_Opponent_Ground>
Variable_Target.IsHumanControlled
*
(((Variable_Target.EnemyForce.HasSpaceForce {Parameter_Faction = "Rebel", Parameter_Faction = "Empire", Parameter_Faction = "Underworld", Parameter_Faction = "Hutts"})
+ (Variable_Target.EnemyForce.HasGroundForce {Parameter_Faction = "Rebel", Parameter_Faction = "Empire", Parameter_Faction = "Underworld", Parameter_Faction = "Hutts"})) > 0)
*
(1.0 - Variable_Target.EnemyForce.GroundTotalNBPTM)
</Is_Neglected_By_My_Opponent_Ground>
<!-- the AI just always wants to be building offensive units if it can afford it. Just tune
this number so that high desirability conquer plans will win and cause production, but low desirability conquer plans
will eventually get the forces they need, via build_forces.
(1.0 - (Function_Need_Tech_Upgrade_Unblocked.Evaluate * Function_Has_Enough_Space_Force_Globally.Evaluate))
-->
<Global_Offensive_Need_Space>
(1.0 - Function_Has_Enough_Space_Force_Globally.Evaluate)
*
3.0
</Global_Offensive_Need_Space>
<Allow_Blind_Ground_Production>
(
0.5
*
(Variable_Self.CreditsUnnormalized >= 2000)
+
0.5
*
(Function_Enemy_Global_Land_Unit_Raw_Total.Evaluate > (1.33 * Function_Friendly_Global_Land_Unit_Raw_Total.Evaluate))
+
0.5
*
(Function_Enemy_Global_Land_Unit_Raw_Total.Evaluate > (0.9 * Function_Friendly_Global_Land_Unit_Raw_Total.Evaluate))
)
*
(3.0 > Function_Allow_Blind_Space_Production.Evaluate)
*
(Script_AnyFreeLandSlots.Evaluate)
</Allow_Blind_Ground_Production>
<Allow_Blind_Space_Production>
1.0
*
(Variable_Self.CreditsUnnormalized >= 2000)
+
(Function_Enemy_Global_Space_Unit_Raw_Total.Evaluate > (1.33 * Function_Friendly_Global_Space_Unit_Raw_Total.Evaluate))
+
(Function_Enemy_Global_Space_Unit_Raw_Total.Evaluate > (0.9 * Function_Friendly_Global_Space_Unit_Raw_Total.Evaluate))
</Allow_Blind_Space_Production>
<!-- Determine if we'd like to invade this system.
Choose unoccupied systems first (weighed by how current our info is)
factor in systems that my non-pirate opponent has neglected to defended
factor in connected systems (the enemy_destination reachability already considers this, but this equation is also used for scouting needs)
factor in planets which would connect islands of ownership (all targets are 0 if there is only one island of ownership)
and add weight for having trade routes
factor in systems with high offensive value
bonus for chokepoint hints
bonus for targets which have been marked up by script (as on the path to a juicy target) if the player has started to attack us
dislike pirate systems under some circumstances (don't zero out desire entirely, because we want to expand through pirates toward the player)
-->
<Is_Good_Invasion_Target>
15.0 * (Variable_Target.EnemyForce.HasGroundForce == 0.0) * (Variable_Target.EnemyForce.HasSpaceForce == 0.0) * (Function_System_Recon_Relevance.Evaluate)
+
5.0 * Function_Is_Neglected_By_My_Opponent_Space.Evaluate
+
8.0 * Function_GenericPlanetValue.Evaluate
+
5.0 * Variable_Target.Hints.Chokepoint
+
2.0 * Variable_Target.ConnectsIsolatedPlanetsByForce
+
3.0 * Variable_Target.TradeRoutes
+
Variable_Target.Markup
+
Variable_Target.Hints.PriorityTarget
-
5.0 * (Function_Is_AI_And_Should_Be_Ignored.Evaluate)
-
(5.0 + 5.0 * Variable_Self.AnyCurrentThreats) * Function_Opens_New_Front.Evaluate
+
(10.0 * Variable_Self.IsFaction {Parameter_Faction = "UNDERWORLD"} * (Variable_Target.IsConnectedToCorruption *
(Function_Is_Connected_To_Me.Evaluate == 0.0) -
Variable_Target.IsCorrupted))
</Is_Good_Invasion_Target>
<!-- We don't want to waste effort on AI systems under some circumstances.
Is this an AI system
AND
Do we not have have enough Space forces to spare spending some on AI
AND
Do we have any current threats (by being adjacent to systems with a human player presence)
OR
Would attacking this system put us adjacent to the human player
-->
<Is_AI_And_Should_Be_Ignored>
(Variable_Target.IsHumanControlled == 0.0)
*
(Function_Space_Contrast.Evaluate > (Game.FriendlyForce.SpaceTotalUnnormalized / 1.5))
*
Function_Needs_More_Space_Force_Globally.Evaluate
*
Variable_Self.AnyCurrentThreats
</Is_AI_And_Should_Be_Ignored>
<!-- Does the system have a human presence
AND
Is it connected to a system owned by the AI
-->
<Is_Target_A_Current_Threat>
Variable_Target.IsHumanControlled
*
Variable_Target.EnemyForce.HasSpaceForce
*
Function_Is_Connected_To_Me.Evaluate
</Is_Target_A_Current_Threat>
<!-- This perception will cause directed force buildup, so that plans where we can't meet minimum contrast,
given the goal definition, will eventually become feasable.
If this target's total space contrast is more than X% our total (non-base) space contrast
OR
If this target's total ground contrast is more than X% our total (non-base) ground contrast
... then we should be building forces that can apply to that target's forces
-->
<Needs_Targetted_Build_Forces>
(Function_Space_Contrast.Evaluate > (Game.FriendlyForce.SpaceTotalUnnormalized / 4.0))
+
(Function_Ground_Contrast.Evaluate > (Game.FriendlyForce.GroundTotalUnnormalized / 4.0))
>=
1.0
</Needs_Targetted_Build_Forces>
<!-- This perception is used to determine if we can no longer afford to trickle money into the MajorItem budget
If we don't have at least X% the space force of all of our enemies (including pirates)
-->
<Needs_More_Space_Force_Globally>
(Variable_Human.SpaceTotalUnnormalized > (Variable_Self.SpaceTotalUnnormalized * 1.0))
</Needs_More_Space_Force_Globally>
<!-- Don't trickle to Major Item fund if:
we Need better Space Offense forces
OR
we've already bought the death star
-->
<Need_To_Flush_MajorItem_Budget>
Function_Needs_More_Space_Force_Globally.Evaluate
+
Variable_Self.HasUnit{Parameter_Type = "Death_Star_II", Parameter_Count = 1}
</Need_To_Flush_MajorItem_Budget>
<!-- The AI can afford to spend on tech if it has X% space force over the human player
8/16/05 - reduced the amount by which AI has to be winning
-->
<Has_Enough_Space_Force_Globally>
(0.9 * Function_Friendly_Global_Space_Unit_Raw_Total.Evaluate) > Function_Enemy_Global_Space_Unit_Raw_Total.Evaluate
</Has_Enough_Space_Force_Globally>
<!-- How valuable is the planet? -->
<!-- Bonus for planets we haven't visited recently -->
<!-- Bonus for planets that don't have a smuggler already attached -->
<!-- Bonus for planets with high political control -->
<!-- Can't weaken neutral/pirate planets -->
<!-- Don't bother if my income is high (might as well just conquer)
*
(1.0 - (Variable_Self.GrossIncomeNBPTM > 0.33))
-->
<Is_Good_Weaken_Target>
0.5 *
(Function_GenericPlanetValue.Evaluate +
Variable_Target.EnemyForce.SpaceTotal.TimeLastSeen +
(1.0 - Variable_Target.HasCreditSiphon) +
Variable_Target.TargetPoliticalControl) *
Variable_Target.IsHumanControlled
</Is_Good_Weaken_Target>
<!-- Can't have multiple smugglers on a target -->
<!-- Don't steal when I might get caught -->
<Suitable_Smuggler_Target>
(1.0 - Variable_Target.HasCreditSiphon) *
(1.0 - Variable_Target.EnemyForce.AntiStealthEffectiveness)
</Suitable_Smuggler_Target>
<Needs_Smuggler_Removed>
Variable_Target.HasCreditSiphon
</Needs_Smuggler_Removed>
<!-- Desire to perform a basic blind space assault
Make sure there is a space force (otherwise a simple Ground Grab will take care of it)
AND SCALE BY
base invasion worth PLUS bonus to prevent this from going negative
bonus for having no ground force (should be a quick win for Fast Expansion)
-->
<Is_Good_Space_Sweep_Target>
Variable_Target.EnemyForce.HasSpaceForce
*
(
Function_Is_Good_Invasion_Target.Evaluate + 30.0
+
5.0 * (Variable_Target.EnemyForce.HasGroundForce == 0.0)
)
</Is_Good_Space_Sweep_Target>
<!-- Desire to perform a basic ground assult
Make sure there's no starbase
AND
no space force
AND SCALE BY
base invasion worth PLUS bonus to prevent this from going negative
bonus for having no ground force (should be a quick win for Fast Expansion)
-->
<Is_Good_Ground_Grab_Target>
(Variable_Target.StarbaseLevel == 0.0)
*
(1.0 - Variable_Target.EnemyForce.HasSpaceForce)
*
(
Function_Is_Good_Invasion_Target.Evaluate + 30.0
+
5.0 * (Variable_Target.EnemyForce.HasGroundForce == 0.0)
)
</Is_Good_Ground_Grab_Target>
<More_Planets_Needed>
(1.0 - (Variable_Self.PlanetsControlled >= 0.20))
</More_Planets_Needed>
<Self_Present>
(Variable_Target.TargetPoliticalControl +
Variable_Target.FriendlyForce.HasSpaceForce +
Variable_Target.FriendlyForce.HasGroundForce)
</Self_Present>
<Enemy_Present>
Variable_Target.IsHumanControlled
*
((Variable_Target.EnemyForce.HasSpaceForce + Variable_Target.EnemyForce.HasGroundForce) > 0.0)
</Enemy_Present>
<!-- Do I have enough planets to start thinking about going after my true opponent? -->
<!-- Is the planet valuable? -->
<!-- Favor weak planets -->
<!-- Exclude pirate/neutral planets -->
<Is_Good_Harry_Target>
1.75 *
Function_Is_Good_Invasion_Target.Evaluate *
Variable_Target.IsHumanControlled
</Is_Good_Harry_Target>
<Almost_Won>
Variable_Self.PlanetsControlled >= 0.66
</Almost_Won>
<!-- Of the two largest blocks of controlled planets that are not connected to each other,
does the smaller have at least X% of the number of planets the larger has? I.e, are a significant chunk of the AI's
planets stranded from the main force?
-->
<Forces_Are_Significantly_Divided>
Variable_Self.WorstIslandFractionOfLargest >= 0.2
</Forces_Are_Significantly_Divided>
<!--
Does this planet represent the connecting node between two islands of forces?
AND
Add X to the baseline invasion desire, so that we choose this custom goal over the standard
AND
Scale desirability by how many planets are stranded from the largest island so that
we'll add up to another X points of desire if we're split in half (less for smaller fragments)
UNUSED
bonus if this is a chokepoint planet
*
(1.0 + Variable_Target.Hints.Chokepoint)
-->
<Need_To_Reconnect_Islands>
Variable_Target.ConnectsLargestIslands
*
Function_First_Attack_Allowed.Evaluate
*
(
5.0
+
clamp(Function_Is_Good_Invasion_Target.Evaluate, 0.0, 5.0)
+
5.0 * Variable_Target.ConnectsIsolatedPlanetsByForce
+
(10.0 * Variable_Self.WorstIslandFractionOfLargest)
)
</Need_To_Reconnect_Islands>
<Space_Contrast>
Variable_Target.EnemyForce.SpaceTotalUnnormalized + Variable_Target.EnemyForce.StarbaseTotalUnnormalized
</Space_Contrast>
<Ground_Contrast>
Variable_Target.EnemyForce.GroundTotalUnnormalized + Variable_Target.EnemyForce.GroundbaseTotalUnnormalized
</Ground_Contrast>
<Am_I_In_Winning_Position>
(Game.Age > 300.0)
*
(Variable_Self.PlanetsControlledUnnormalized > (2.0 * Variable_Human.PlanetsControlled))
*
(Variable_Self.SpaceTotalUnnormalized > (3.0 * Variable_Human.SpaceTotalUnnormalized))
*
(Variable_Self.GroundTotalUnnormalized > (3.0 * Variable_Human.GroundTotalUnnormalized))
</Am_I_In_Winning_Position>
<!-- Same basic concept as whether I should conquer a planet
Factor so that in general normal conquest takes precedence over raid (since it has higher expected success rate)
HOWEVER if the planet is close to empty then raid should be the preferred conquest mechanic
Must be raid capable faction
Target must have accessible surface
-->
<Is_Good_Raid_Target>
(0.5 + (1000 >= Variable_Target.EnemyForce.GroundTotalUnnormalized))
*
Variable_Self.IsFaction {Parameter_Faction = "REBEL"} *
Function_Is_Good_Invasion_Target.Evaluate *
Variable_Target.IsSurfaceAccessible *
Variable_Target.IsHumanControlled *
Function_First_Attack_Allowed.Evaluate
</Is_Good_Raid_Target>
<Opens_New_Front>
(Variable_Target.IsHumanControlled == 0.0) *
Function_Is_Connected_To_Enemy.Evaluate
</Opens_New_Front>
<Should_Conquer_Pirate_Planet>
Function_Is_Good_Invasion_Target.Evaluate
*
(Variable_Target.IsHumanControlled == 0.0)
</Should_Conquer_Pirate_Planet>
<Should_Conquer_Opponent_Planet>
(
1.25
*
Function_Is_Good_Invasion_Target.Evaluate
*
Variable_Target.IsHumanControlled
*
((Variable_Self.HasUnit {Parameter_Type = "DEATH_STAR_II"} == 0.0)
+
(Function_Want_To_Fire_DS.Evaluate == 0.0))
)
*
Function_First_Attack_Allowed.Evaluate
*
(1.0 - Function_Should_Perform_Unrestricted_Grab_Space.Evaluate)
</Should_Conquer_Opponent_Planet>
<!-- fire the DS on any system unless taking it over is a cake walk -->
<Want_To_Fire_DS>
50.0
*
Function_First_Attack_Allowed.Evaluate
*
(Variable_Target.EnemyForce.GroundTotalUnnormalized > 1500)
*
Variable_Target.IsHumanControlled
</Want_To_Fire_DS>
<First_Attack_Allowed>
Game.Age > Function_Initial_Grace_Period.Evaluate
</First_Attack_Allowed>
<Initial_Grace_Period>
Variable_Self.IsDifficulty{Parameter_Difficulty_Level_Type = DifficultyLevelType[Easy]}
* (300.0 + (10.0 * Variable_Self.PlanetsControlledUnnormalized))
+
Variable_Self.IsDifficulty{Parameter_Difficulty_Level_Type = DifficultyLevelType[Normal]}
* (200.0 + (7.0 * Variable_Self.PlanetsControlledUnnormalized))
+
Variable_Self.IsDifficulty{Parameter_Difficulty_Level_Type = DifficultyLevelType[Hard]}
* (50.0 + (2.0 * Variable_Self.PlanetsControlledUnnormalized))
</Initial_Grace_Period>
<Should_Perform_Unrestricted_Grab_Space>
50.0
*
Function_First_Attack_Allowed.Evaluate
*
(Function_Space_Force_Limit_For_Unrestricted_Grab.Evaluate >= Variable_Target.EnemyForce.SpaceTotalUnnormalized)
*
(3 > Variable_Target.StarbaseLevelUnnormalized)
*
Function_Is_Connected_To_Me.Evaluate
*
(1.0 - Variable_Target.FriendlyForce.HasSpaceForce)
*
Variable_Target.IsHumanControlled
</Should_Perform_Unrestricted_Grab_Space>
<Should_Perform_Unrestricted_Grab_Land>
50.0
*
Function_First_Attack_Allowed.Evaluate
*
(Function_Ground_Force_Limit_For_Unrestricted_Grab.Evaluate >= Variable_Target.EnemyForce.GroundTotalUnnormalized)
*
Function_Is_Connected_To_Me.Evaluate
*
Variable_Target.IsSurfaceAccessible
*
(Variable_Target.StarbaseLevel == 0.0)
*
(1.0 - Variable_Target.EnemyForce.HasSpaceForce)
*
Variable_Target.IsHumanControlled
</Should_Perform_Unrestricted_Grab_Land>
<Space_Force_Limit_For_Unrestricted_Grab>
Variable_Self.IsDifficulty{Parameter_Difficulty_Level_Type = DifficultyLevelType[Easy]}
* (2000.0 + (100.0 * Variable_Human.TechLevel))
+
Variable_Self.IsDifficulty{Parameter_Difficulty_Level_Type = DifficultyLevelType[Normal]}
* (2500.0 + (250.0 * Variable_Human.TechLevel))
+
Variable_Self.IsDifficulty{Parameter_Difficulty_Level_Type = DifficultyLevelType[Hard]}
* (5000.0 + (1000.0 * Variable_Human.TechLevel))
</Space_Force_Limit_For_Unrestricted_Grab>
<Ground_Force_Limit_For_Unrestricted_Grab>
Variable_Self.IsDifficulty{Parameter_Difficulty_Level_Type = DifficultyLevelType[Easy]}
* (200.0 + (20.0 * Variable_Human.TechLevel))
+
Variable_Self.IsDifficulty{Parameter_Difficulty_Level_Type = DifficultyLevelType[Normal]}
* (400.0 + (40.0 * Variable_Human.TechLevel))
+
Variable_Self.IsDifficulty{Parameter_Difficulty_Level_Type = DifficultyLevelType[Hard]}
* (800.0 + (80.0 * Variable_Human.TechLevel))
</Ground_Force_Limit_For_Unrestricted_Grab>
<Should_Shutdown_Offense_For_Story_Campaign>
Game.IsStoryCampaign
*
Variable_Self.IsDifficulty{Parameter_Difficulty_Level_Type = DifficultyLevelType[Easy]}
*
(5 > Variable_Human.PlanetsControlledUnnormalized)
</Should_Shutdown_Offense_For_Story_Campaign>
</Equations>