Modding/AI
< Modding
Work in Progress
This page is currently WORK IN PROGRESS. Some things may be missing.
Feel free to contribute and don't worry about perfection - other editors can make corrections if necessary. Just get creating!
There are 10 main types of AI in Cosmoteer. (This page will contain things from both .rules and the source code, and will specify which)
Each are separate .rules files.
ai_buildbattle
UpdateInterval = [.25, .75] // A random range.
IsAvailableInCreativeMode = false
IsCreativeModeDefault = false
IsAvailableInMultiplayer = false
IsMultiplayerDefault = false
StrategyModules
[
{
// Makes the AI go to the capture point.
Type = AreaPatrol
DefaultPatrolRadius = 50
AvoidableDoodadTags = [sun, station]
AvoidableDoodadBuffer = 100
}
{
Type = AggroEnemies
TargetSwitchThresholdFactor = 2
TargetDistanceFactorExponent = 0.5
TargetFirepowerCacheTime = 10
AcquireAggroWithinRadar = true
ReleaseAggroWithinRadar = true
}
]
TacticsModules
[
{
Type = DefaultAttackRadiusAndRotation
AttackRotationSwitchThresholdFactor = 1.25
AttackRotationsToCheck = 8
UseSavedAboveHealth = 50%
}
{
Type = RandomAttackAngle
AttackAngleChangeInterval = [5, 10]
AttackAngleChangeDelta = [-30d, 30d]
CoordinateFlanking = true
}
]
TargetingModules
[
{
Type = ValueTargeter
TargetChecksPerUpdate = 10
TargetSwitchThresholdFactor = 2
TargetValueFactorPerPenetrationDist = .75
}
]
ai_defense_platform
UpdateInterval = 1
StrategyModules
[
{
Type = HoldPosition
HoldRotation = false
}
{
Type = AggroEnemies
TargetSwitchThresholdFactor = 2
TargetDistanceFactorExponent = 0.5
TargetFirepowerCacheTime = 10
AcquireAggroWithinRadar = false
ReleaseAggroWithinRadar = false
RotateOnly = true
}
]
TacticsModules
[
{
Type = DefaultAttackRadiusAndRotation
AttackRotationSwitchThresholdFactor = 1.25
AttackRotationsToCheck = 8
RotateOnly = true
UseSavedAboveHealth = 50%
}
]
TargetingModules
[
{
Type = ValueTargeter
TargetChecksPerUpdate = 10
TargetSwitchThresholdFactor = 2
TargetValueFactorPerPenetrationDist = .75
}
]
ai_easy
NameKey = "AI/Easy"
UpdateInterval = [.75, 1.25] // A random range.
IsAvailableInCreativeMode = true
IsAvailableInMultiplayer = true
StrategyModules
[
{
Type = AreaPatrol
DefaultPatrolRadius = 500
AvoidableDoodadTags = [sun, station]
AvoidableDoodadBuffer = 100
}
{
Type = FollowFleetLeader
}
{
Type = AggroEnemies
TargetSwitchThresholdFactor = 2
TargetDistanceFactorExponent = 0.5
TargetFirepowerCacheTime = 10
AcquireAggroWithinRadar = false
ReleaseAggroWithinRadar = false
}
]
TacticsModules
[
{
Type = DefaultAttackRadiusAndRotation
AttackRotationSwitchThresholdFactor = 1.5
AttackRotationsToCheck = 4
UseSavedAboveHealth = 50%
}
]
ai_normal
NameKey = "AI/Normal"
UpdateInterval = [.25, .75] // A random range.
IsAvailableInCreativeMode = true
IsCreativeModeDefault = true
IsAvailableInMultiplayer = true
IsMultiplayerDefault = true
StrategyModules
[
{
Type = AreaPatrol
DefaultPatrolRadius = 500
AvoidableDoodadTags = [sun, station]
AvoidableDoodadBuffer = 100
}
{
Type = FollowFleetLeader
}
{
Type = AggroEnemies
TargetSwitchThresholdFactor = 2
TargetDistanceFactorExponent = 0.5
TargetFirepowerCacheTime = 10
AcquireAggroWithinRadar = true
ReleaseAggroWithinRadar = true
}
]
TacticsModules
[
{
Type = DefaultAttackRadiusAndRotation
AttackRotationSwitchThresholdFactor = 1.25
AttackRotationsToCheck = 8
UseSavedAboveHealth = 50%
}
{
Type = RandomAttackAngle
AttackAngleChangeInterval = [5, 10]
AttackAngleChangeDelta = [-30d, 30d]
CoordinateFlanking = true
}
]
TargetingModules
[
{
Type = ValueTargeter
TargetChecksPerUpdate = 10
TargetSwitchThresholdFactor = 2
TargetValueFactorPerPenetrationDist = .75
}
]
ai_military_station
UpdateInterval = 10
StrategyModules
[
{
Type = HoldPosition
HoldRotation = false
}
{
Type = SelfRepair
RepairChecksPerTick = 10
RepairDamaged = true
RebuildDestroyed = true
AllowPartialRepair = true
AllowPartialRebuild = false
}
{
Type = AggroEnemies
TargetSwitchThresholdFactor = 2
TargetDistanceFactorExponent = 0.5
TargetFirepowerCacheTime = 10
AcquireAggroWithinRadar = false
ReleaseAggroWithinRadar = false
RotateOnly = true
}
]
TargetingModules
[
{
Type = ValueTargeter
TargetChecksPerUpdate = 10
TargetSwitchThresholdFactor = 2
TargetValueFactorPerPenetrationDist = .75
}
]
CommsModules
[
{
Type = Trade
AllowHumanTrade = true
AllowNpcTrade = true
HelpWithConstruction = true
AllowO2Refill = true
}
{
Type = TechProvider
}
]
ai_police
UpdateInterval = [.25, .75] // A random range.
StrategyModules
[
{
Type = DeleteSelf
}
{
Type = WantedSearch
AvoidableDoodadTags = [sun]
AvoidableDoodadBuffer = 100
}
{
Type = AggroEnemies
TargetSwitchThresholdFactor = 2
TargetDistanceFactorExponent = 0.5
TargetFirepowerCacheTime = 10
AcquireAggroWithinRadar = true
ReleaseAggroWithinRadar = true
}
]
TacticsModules
[
{
Type = DefaultAttackRadiusAndRotation
AttackRotationSwitchThresholdFactor = 1.25
AttackRotationsToCheck = 8
UseSavedAboveHealth = 50%
}
{
Type = RandomAttackAngle
AttackAngleChangeInterval = [5, 10]
AttackAngleChangeDelta = [-30d, 30d]
CoordinateFlanking = true
}
]
TargetingModules
[
{
Type = ValueTargeter
TargetChecksPerUpdate = 10
TargetSwitchThresholdFactor = 2
TargetValueFactorPerPenetrationDist = .75
}
]
StasisModules
[
{
Type = DeleteSelf
}
{
Type = WantedSearch
DefaultStasisSpeed = 100
AvoidableDoodadTags = [sun]
AvoidableDoodadBuffer = 100
}
]
ai_space_station
UpdateInterval = 10
StrategyModules
[
{
Type = HoldPosition
HoldRotation = false
}
{
Type = SelfRepair
RepairChecksPerTick = 10
RepairDamaged = true
RebuildDestroyed = true
AllowPartialRepair = true
AllowPartialRebuild = false
}
{
Type = AggroEnemies
TargetSwitchThresholdFactor = 2
TargetDistanceFactorExponent = 0.5
TargetFirepowerCacheTime = 10
AcquireAggroWithinRadar = false
ReleaseAggroWithinRadar = false
RotateOnly = true
}
]
CommsModules
[
{
Type = Trade
AllowHumanTrade = true
AllowNpcTrade = true
HelpWithConstruction = true
AllowO2Refill = true
}
{
Type = CrewProvider
CrewForHireFraction = 20%
CrewHireCostPerCrewRatio = &<./Data/modes/career/career.rules>/CrewHireCostPerCrewRatioStations
CrewHireCostRoundToMultiple = &<./Data/modes/career/career.rules>/CrewHireCostRoundToMultiple
}
{
Type = MissionProvider
}
{
Type = TechProvider
}
]
StasisModules
[
{
Type = MissionProvider
}
]
ai_station_guard
UpdateInterval = [.25, .75] // A random range.
StrategyModules
[
{
Type = AreaPatrol
DefaultPatrolRadius = 500
AvoidableDoodadTags = [sun]
AvoidableDoodadBuffer = 100
}
{
Type = AggroEnemies
TargetSwitchThresholdFactor = 2
TargetDistanceFactorExponent = 0.5
TargetFirepowerCacheTime = 10
AcquireAggroWithinRadar = false
ReleaseAggroWithinRadar = true
}
]
TacticsModules
[
{
Type = DefaultAttackRadiusAndRotation
AttackRotationSwitchThresholdFactor = 1.25
AttackRotationsToCheck = 8
UseSavedAboveHealth = 50%
}
{
Type = RandomAttackAngle
AttackAngleChangeInterval = [5, 10]
AttackAngleChangeDelta = [-30d, 30d]
CoordinateFlanking = true
}
]
TargetingModules
[
{
Type = ValueTargeter
TargetChecksPerUpdate = 10
TargetSwitchThresholdFactor = 2
TargetValueFactorPerPenetrationDist = .75
}
]
ai_trade_ship
UpdateInterval = [.75, 1.25] // A random range.
StrategyModules
[
{
Type = TradeShip
}
{
Type = HaltForComms
HaltForTrade = true
}
{
Type = SelfRepair
RepairChecksPerTick = 1
RepairDamaged = true
RebuildDestroyed = true
AllowPartialRepair = true
AllowPartialRebuild = false
}
{
Type = FleeFromEnemies
FleeDistance = 1000
RecallCrew = true
FtlAfter = [10, 20]
}
]
CommsModules
[
{
Type = Trade
AllowHumanTrade = true
AllowNpcTrade = true
}
{
Type = CrewProvider
CrewForHireFraction = 20%
CrewHireCostPerCrewRatio = &<./Data/modes/career/career.rules>/CrewHireCostPerCrewRatioTradeShips
CrewHireCostRoundToMultiple = &<./Data/modes/career/career.rules>/CrewHireCostRoundToMultiple
}
]
ai_wanderer
UpdateInterval = [.25, .75] // A random range.
StrategyModules
[
{
Type = AreaPatrol
DefaultPatrolRadius = 30000
AvoidableDoodadTags = [sun, station]
AvoidableDoodadBuffer = 100
}
{
Type = FollowFleetLeader
}
{
Type = AggroEnemies
TargetSwitchThresholdFactor = 2
TargetDistanceFactorExponent = 0.5
TargetFirepowerCacheTime = 10
AcquireAggroWithinRadar = false
ReleaseAggroWithinRadar = true
}
]
TacticsModules
[
{
Type = DefaultAttackRadiusAndRotation
AttackRotationSwitchThresholdFactor = 1.25
AttackRotationsToCheck = 8
UseSavedAboveHealth = 50%
}
{
Type = RandomAttackAngle
AttackAngleChangeInterval = [5, 10]
AttackAngleChangeDelta = [-30d, 30d]
CoordinateFlanking = true
}
]
TargetingModules
[
{
Type = ValueTargeter
TargetChecksPerUpdate = 10
TargetSwitchThresholdFactor = 2
TargetValueFactorPerPenetrationDist = .75
}
]
StasisModules
[
{
Type = AreaPatrol
DefaultPatrolRadius = 30000
DefaultStasisSpeed = 100
AvoidableDoodadTags = [sun, station]
AvoidableDoodadBuffer = 100
}
{
Type = FollowFleetLeader
DefaultStasisSpeed = 100
AvoidableDoodadTags = [sun, station]
AvoidableDoodadBuffer = 100
}
]