Modding/AI

From Cosmoteer Wiki
Jump to navigation Jump to search
CalloutIconWarning.png
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
	}
]
They are defined by different 'modules'
StrategyModules:
TacticsModules:
TargetingModules: