Adding Bots to non Coop maps
Re: Adding Bots to non Coop maps
yeah i figured thats what the problem was... Im at work right now but i will post my Ai.con and CTF.con when i get home. I think i just need to figure out how to rewrite the stratagies... I think Berlin ctf would be killer with all that extra cannon fodder around... Is it possible to write the strategies to have the bots try and cap the flag?
Re: Adding Bots to non Coop maps
Yes, it isn't perfect though because there's no way to know which bot has the flag. I just set different object type flags (North, South) for each CTF strategic area. You would want to set the SA to a radius of 2 (the flag cap radius), but the SAI gets rather flaky determining ownership with any strategic area radius less than 5. So, set the radius to 5 but move the SA slightly past the flag so the bot has to move past the flag to enter it. Each team is initially set to an attack strategy. Once the bot enters the SA, ownership is reversed and the strategy for that team is then set to total defence. That makes all the bots run like hell for their own flag. It's a riot to see, but it ain't perfect. Soon enough, the opposing team will regain control, the attack strat reinstated, and they're now heading back for the same flag pole regardless of whether they're carrying a flag or not. It's no perfect solution, but probably the only one. And it does create "traffic".Is it possible to write the strategies to have the bots try and cap the flag
I'm at work ATM, but will provide some examples ASAP. Matt
Re: Adding Bots to non Coop maps
Here's my strats for SSM Berlin AI CTF. There should be no problem dropping these in your DCF berlin as the CP's are the same:
StrategicAreas.con:
You could eliminate some of those waypoints, but i leave them in to keep traffic moving all around town.
Strategies.con:
conditions.con:
prerequisites.con:
I typically create an AICTF folder then copy the contents of the AI folder there (strategicareas, strategies, prerequisites, conditions) including the added requirements (AIbehaviours, AIdefault, and their AI subfolder). Make your bot CTF changes in that AICTF folder and call it from AI.con. In this example, the map manages seperate strats for both COOP and CTF modes.
AI.con:
Also, consider amping up the Moveto behaviors in your AICTF/AIbehaviours.con, otherwise the bots will spend more time acquiring targets rather than running to get to a flag. Tweak to your liking:
I hope that's what you're looking for. Let me know how it works out.
StrategicAreas.con:
Code: Select all
if v_arg1 == host
rem ----- Host
rem ----------------------------------------------------------------------------
rem *** Create strategic areas ***
aiStrategicArea.create RussianBase 1794.74/1941.2 1799.74/1946.2 500
aiStrategicArea.create SecondBase 1818/1782 1825/1793.5 5
aiStrategicArea.create EastWayPoint 1845.75/1818.5 1851.25/1824 10
aiStrategicArea.create WestWayPoint 1728.5/1819.5 1733/1825 10
aiStrategicArea.create SoutEastWayPoint 1847.25/1746.75 1852.75/1752.25 10
aiStrategicArea.create RussianBaseExit 1795/1898.5 1803.5/1905 10
aiStrategicArea.create CentreWayPoint 1790.5/1811.5 1804/1825.5 10
aiStrategicArea.create FirstBase 1814.5/1847.5 1825/1858 5
aiStrategicArea.create ThirdBase 1693.61/1776.07 1697.61/1780.07 500
aiStrategicArea.create SoutWestWayPoint 1728.75/1747.75 1733.25/1752.25 10
aiStrategicArea.setActive RussianBase
AIStrategicArea.addNeighbour RussianBaseExit
AIStrategicArea.addNeighbour ThirdBase
AIStrategicArea.addNeighbour SecondBase
AIStrategicArea.addNeighbour CentreWayPoint
AIStrategicArea.addNeighbour WestWayPoint
AIStrategicArea.addNeighbour FirstBase
AIStrategicArea.addNeighbour EastWayPoint
AIStrategicArea.addNeighbour SoutWestWayPoint
AIStrategicArea.addNeighbour SoutEastWayPoint
rem aiStrategicArea.addObjectTypeFlag ControlPoint
aiStrategicArea.addObjectTypeFlag Base
aiStrategicArea.addObjectTypeFlag North
AIStrategicArea.setOrderPosition Tank 1798.5/1940.5
AIStrategicArea.setOrderPosition Infantry 1801/1945.7
aiStrategicArea.setSide 2
aiStrategicArea.setActive SecondBase
AIStrategicArea.addNeighbour RussianBaseExit
AIStrategicArea.addNeighbour ThirdBase
AIStrategicArea.addNeighbour RussianBase
AIStrategicArea.addNeighbour CentreWayPoint
AIStrategicArea.addNeighbour WestWayPoint
AIStrategicArea.addNeighbour FirstBase
AIStrategicArea.addNeighbour EastWayPoint
AIStrategicArea.addNeighbour SoutWestWayPoint
AIStrategicArea.addNeighbour SoutEastWayPoint
aiStrategicArea.addObjectTypeFlag East
aiStrategicArea.setSide 2
aiStrategicArea.setActive EastWayPoint
AIStrategicArea.addNeighbour RussianBaseExit
AIStrategicArea.addNeighbour ThirdBase
AIStrategicArea.addNeighbour SecondBase
AIStrategicArea.addNeighbour CentreWayPoint
AIStrategicArea.addNeighbour WestWayPoint
AIStrategicArea.addNeighbour FirstBase
AIStrategicArea.addNeighbour RussianBase
AIStrategicArea.addNeighbour SoutWestWayPoint
AIStrategicArea.addNeighbour SoutEastWayPoint
aiStrategicArea.addObjectTypeFlag Flank
aiStrategicArea.addObjectTypeFlag Route
aiStrategicArea.addObjectTypeFlag East
AIStrategicArea.setOrderPosition Tank 1851.75/1823.75
AIStrategicArea.setOrderPosition Infantry 1849/1820
aiStrategicArea.setSide 2
aiStrategicArea.setActive WestWayPoint
AIStrategicArea.addNeighbour RussianBaseExit
AIStrategicArea.addNeighbour ThirdBase
AIStrategicArea.addNeighbour RussianBase
AIStrategicArea.addNeighbour CentreWayPoint
AIStrategicArea.addNeighbour RussianBase
AIStrategicArea.addNeighbour FirstBase
AIStrategicArea.addNeighbour EastWayPoint
AIStrategicArea.addNeighbour SoutWestWayPoint
AIStrategicArea.addNeighbour SoutEastWayPoint
aiStrategicArea.addObjectTypeFlag Centre
aiStrategicArea.addObjectTypeFlag Route
aiStrategicArea.addObjectTypeFlag West
aiStrategicArea.setSide 0
aiStrategicArea.setActive SoutEastWayPoint
AIStrategicArea.addNeighbour RussianBaseExit
AIStrategicArea.addNeighbour ThirdBase
AIStrategicArea.addNeighbour SecondBase
AIStrategicArea.addNeighbour CentreWayPoint
AIStrategicArea.addNeighbour WestWayPoint
AIStrategicArea.addNeighbour FirstBase
AIStrategicArea.addNeighbour RussianBase
AIStrategicArea.addNeighbour SoutWestWayPoint
AIStrategicArea.addNeighbour EastWayPoint
aiStrategicArea.addObjectTypeFlag Flank
aiStrategicArea.addObjectTypeFlag Route
aiStrategicArea.addObjectTypeFlag West
aiStrategicArea.setSide 1
aiStrategicArea.setActive RussianBaseExit
AIStrategicArea.addNeighbour WestWayPoint
AIStrategicArea.addNeighbour ThirdBase
AIStrategicArea.addNeighbour RussianBase
AIStrategicArea.addNeighbour CentreWayPoint
AIStrategicArea.addNeighbour RussianBase
AIStrategicArea.addNeighbour FirstBase
AIStrategicArea.addNeighbour EastWayPoint
AIStrategicArea.addNeighbour SoutWestWayPoint
AIStrategicArea.addNeighbour SoutEastWayPoint
aiStrategicArea.addObjectTypeFlag Route
aiStrategicArea.setSide 2
aiStrategicArea.setActive CentreWayPoint
AIStrategicArea.addNeighbour RussianBaseExit
AIStrategicArea.addNeighbour ThirdBase
AIStrategicArea.addNeighbour SecondBase
AIStrategicArea.addNeighbour SoutEastWayPoint
AIStrategicArea.addNeighbour FirstBase
AIStrategicArea.addNeighbour RussianBase
AIStrategicArea.addNeighbour SoutWestWayPoint
AIStrategicArea.addNeighbour WestWayPoint
AIStrategicArea.addNeighbour EastWayPoint
aiStrategicArea.addObjectTypeFlag Centre
aiStrategicArea.addObjectTypeFlag Route
AIStrategicArea.setOrderPosition Tank 1798.75/1829.25
AIStrategicArea.setOrderPosition Infantry 1804/1819
aiStrategicArea.setSide 0
aiStrategicArea.setActive FirstBase
AIStrategicArea.addNeighbour CentreWayPoint
AIStrategicArea.addNeighbour RussianBaseExit
AIStrategicArea.addNeighbour ThirdBase
AIStrategicArea.addNeighbour SecondBase
AIStrategicArea.addNeighbour SoutEastWayPoint
AIStrategicArea.addNeighbour WestWayPoint
AIStrategicArea.addNeighbour RussianBase
AIStrategicArea.addNeighbour SoutWestWayPoint
AIStrategicArea.addNeighbour EastWayPoint
aiStrategicArea.addObjectTypeFlag East
aiStrategicArea.addObjectTypeFlag SoldierSpawner
AIStrategicArea.setOrderPosition Tank 1822/1858
AIStrategicArea.setOrderPosition Infantry 1830/1855.5
aiStrategicArea.setSide 2
aiStrategicArea.setActive ThirdBase
AIStrategicArea.addNeighbour CentreWayPoint
AIStrategicArea.addNeighbour RussianBaseExit
AIStrategicArea.addNeighbour FirstBase
AIStrategicArea.addNeighbour SecondBase
AIStrategicArea.addNeighbour SoutEastWayPoint
AIStrategicArea.addNeighbour WestWayPoint
AIStrategicArea.addNeighbour RussianBase
AIStrategicArea.addNeighbour SoutWestWayPoint
AIStrategicArea.addNeighbour EastWayPoint
aiStrategicArea.addObjectTypeFlag West
aiStrategicArea.addObjectTypeFlag South
aiStrategicArea.addObjectTypeFlag Base
AIStrategicArea.setOrderPosition Tank 1704/1784
AIStrategicArea.setOrderPosition Infantry 1696/1780
aiStrategicArea.setSide 1
aiStrategicArea.setActive SoutWestWayPoint
AIStrategicArea.addNeighbour CentreWayPoint
AIStrategicArea.addNeighbour RussianBaseExit
AIStrategicArea.addNeighbour FirstBase
AIStrategicArea.addNeighbour SecondBase
AIStrategicArea.addNeighbour SoutEastWayPoint
AIStrategicArea.addNeighbour WestWayPoint
AIStrategicArea.addNeighbour RussianBase
AIStrategicArea.addNeighbour ThirdBase
AIStrategicArea.addNeighbour EastWayPoint
aiStrategicArea.addObjectTypeFlag Flank
aiStrategicArea.addObjectTypeFlag Route
aiStrategicArea.addObjectTypeFlag West
rem AIStrategicArea.setOrderPosition Tank 1732/1753
rem AIStrategicArea.setOrderPosition Infantry 1729/1753
aiStrategicArea.setSide 1
rem ----------------------------------------------------------------------------
endIf
Strategies.con:
Code: Select all
rem *** Axis Attack ***
aiStrategy.createStrategy AxisAttack
aiStrategy.Aggression 0.8
aiStrategy.NumberOfAttacks 1
aiStrategy.NumberOfDefences 0
aiStrategy.setPrerequisite AxisAttackPrereq
aiStrategy.TimeLimit 55
aiStrategy.setStrategicObjectsModifier Route 0.0 Owned
aiStrategy.setStrategicObjectsModifier Route 2.0 Neutral
aiStrategy.setStrategicObjectsModifier Route 2.0 Hostile
aiStrategy.setStrategicObjectsModifier South 1.0 Owned
aiStrategy.setStrategicObjectsModifier South 9.0 Neutral
aiStrategy.setStrategicObjectsModifier South 9.0 Hostile
aiStrategy.setStrategicObjectsModifier North 0.0 Owned
aiStrategy.setStrategicObjectsModifier North 9.0 Neutral
aiStrategy.setStrategicObjectsModifier North 9.0 Hostile
rem *** Axis Defend ***
aiStrategy.createStrategy AxisDefend
aiStrategy.Aggression 0.3
aiStrategy.NumberOfAttacks 0
aiStrategy.NumberOfDefences 1
aiStrategy.setPrerequisite AxisDefendPrereq
aiStrategy.TimeLimit 55
aiStrategy.setStrategicObjectsModifier Route 0.0 Owned
aiStrategy.setStrategicObjectsModifier Route 2.0 Neutral
aiStrategy.setStrategicObjectsModifier Route 2.0 Hostile
aiStrategy.setStrategicObjectsModifier South 9.0 Owned
aiStrategy.setStrategicObjectsModifier South 9.0 Neutral
aiStrategy.setStrategicObjectsModifier South 9.0 Hostile
aiStrategy.setStrategicObjectsModifier North 0.0 Owned
aiStrategy.setStrategicObjectsModifier North 0.0 Neutral
aiStrategy.setStrategicObjectsModifier North 0.0 Hostile
rem *** Allied Attack ***
aiStrategy.createStrategy AlliedAttack
aiStrategy.Aggression 0.8
aiStrategy.NumberOfAttacks 1
aiStrategy.NumberOfDefences 0
aiStrategy.setPrerequisite AlliedAttackPrereq
aiStrategy.TimeLimit 55
aiStrategy.setStrategicObjectsModifier Route 0.0 Owned
aiStrategy.setStrategicObjectsModifier Route 2.0 Neutral
aiStrategy.setStrategicObjectsModifier Route 2.0 Hostile
aiStrategy.setStrategicObjectsModifier South 0.0 Owned
aiStrategy.setStrategicObjectsModifier South 9.0 Neutral
aiStrategy.setStrategicObjectsModifier South 9.0 Hostile
aiStrategy.setStrategicObjectsModifier North 1.0 Owned
aiStrategy.setStrategicObjectsModifier North 9.0 Neutral
aiStrategy.setStrategicObjectsModifier North 9.0 Hostile
rem *** Allied Defend ***
aiStrategy.createStrategy AlliedDefend
aiStrategy.Aggression 0.3
aiStrategy.NumberOfAttacks 0
aiStrategy.NumberOfDefences 1
aiStrategy.setPrerequisite AlliedDefendPrereq
aiStrategy.TimeLimit 55
aiStrategy.setStrategicObjectsModifier Route 0.0 Owned
aiStrategy.setStrategicObjectsModifier Route 2.0 Neutral
aiStrategy.setStrategicObjectsModifier Route 2.0 Hostile
aiStrategy.setStrategicObjectsModifier South 0.0 Owned
aiStrategy.setStrategicObjectsModifier South 0.0 Neutral
aiStrategy.setStrategicObjectsModifier South 0.0 Hostile
aiStrategy.setStrategicObjectsModifier North 9.0 Owned
aiStrategy.setStrategicObjectsModifier North 9.0 Neutral
aiStrategy.setStrategicObjectsModifier North 9.0 Hostile
Code: Select all
rem *** Axis Attack ***
aiStrategy.createConstantCondition AxisAttackCond Crisp EqualSmaller Friendly Base 1
aiStrategy.setConditionStrength Required
aiStrategy.createConstantCondition AxisDefendCond Crisp Equal Friendly Base 2
rem EqualGreater Friendly ControlPoint 1
aiStrategy.setConditionStrength Required
rem *** Allied Attack ***
aiStrategy.createConstantCondition AlliedAttackCond Crisp EqualSmaller Friendly Base 1
aiStrategy.setConditionStrength Required
aiStrategy.createConstantCondition AlliedDefendCond Crisp Equal Friendly Base 2
rem EqualGreater Friendly ControlPoint 1
aiStrategy.setConditionStrength Required
Code: Select all
rem *** Axis Attack ***
aiStrategy.createPrerequisite AxisAttackPrereq
aiStrategy.addCondition AxisAttackCond 10.0
rem *** Axis Defend ***
aiStrategy.createPrerequisite AxisDefendPrereq
aiStrategy.addCondition AxisDefendCond 50.0
rem *** Allied Attack ***
aiStrategy.createPrerequisite AlliedAttackPrereq
aiStrategy.addCondition AlliedAttackCond 10.0
rem *** Allied Defend ***
aiStrategy.createPrerequisite AlliedDefendPrereq
aiStrategy.addCondition AlliedDefendCond 50.0
AI.con:
Code: Select all
if v_arg1 == host
Var v_playmode
game.gamePlayMode -> v_playmode
if v_playmode == GPM_CTF
run AICTF/AIdefault.con v_arg1
run AICTF/AIbehaviours.con v_arg1
endIf
rem ----- Host
rem ----------------------------------------------------------------------------
rem ************** LEVEL SPECIFIC AI SETTINGS ***************************
aiSettings.setWorldMapSize 2048 2048
aiSettings.setViewDistance 200
aiSettings.setInformationGridDimension 32
rem ********************** START THE AI *********************************
rem *** Init AI using current settings ****
ai.init 2
rem *** init Botmanager ***
AIBotManager.setLodLevelTicks 6 6 6
AIBotManager.setLodLevelPriority 3 3 3
AIBotManager.setPlannedDecisionMakingThreshold 0.5 0.5 0.5
AIBotManager.setUnplannedDecisionMakingThreshold 0.3 0.4 0.4
AIBotManager.setDecisionMakingInterleave 2 2
AIBotManager.setSensingQuotient 1 1
AIBotManager.setSystemQuotient 40 40 20
rem *** Strategic map dimension, MUST BE DONE BEFORE CREATING SAI! ***
ai.saiMapXDimension 64
ai.saiMapYDimension 64
rem *** Create Strategic AI ***
ai.createSAI
rem *** Enabled or disabled as default ***
ai.saiEnable 1
game.showAIstats 0
ai.showBotStats 0
ai.showStrategicAreas 1
rem ----------------------------------------------------------------------------
endIf
run AIPathFinding.con v_arg1
rem *** Load and set strategies for each side ***
Var v_playmode
game.gamePlayMode -> v_playmode
if v_playmode == GPM_CTF
run AICTF/StrategicAreas v_arg1
run AICTF/Conditions.con v_arg1
run AICTF/Prerequisites.con v_arg1
run AICTF/Strategies.con v_arg1
else
run ai/StrategicAreas v_arg1
run ai/conditions.con v_arg1
run ai/prerequisites.con v_arg1
run ai/Strategies.con v_arg1
endif
if v_arg1 == host
rem ----- Host
rem ----------------------------------------------------------------------------
Var v_playmode
game.gamePlayMode -> v_playmode
if v_playmode == GPM_CTF
ai.addSAIStrategy 1 AxisAttack
ai.addSAIStrategy 1 AxisDefend
ai.addSAIStrategy 2 AlliedAttack
ai.addSAIStrategy 2 AlliedDefend
else
ai.addSAIStrategy 1 west
ai.addSAIStrategy 1 east
ai.addSAIStrategy 1 south
ai.addSAIStrategy 1 north
ai.addSAIStrategy 1 wide
ai.addSAIStrategy 1 finalPush
ai.addSAIStrategy 1 breakOut
ai.addSAIStrategy 2 west
ai.addSAIStrategy 2 east
ai.addSAIStrategy 2 south
ai.addSAIStrategy 2 north
ai.addSAIStrategy 2 wide
ai.addSAIStrategy 2 finalPush
ai.addSAIStrategy 2 breakOut
endif
rem ----------------------------------------------------------------------------
endIf
Also, consider amping up the Moveto behaviors in your AICTF/AIbehaviours.con, otherwise the bots will spend more time acquiring targets rather than running to get to a flag. Tweak to your liking:
Code: Select all
aiSettings.createBehaviourModifiers UnitWeights
aiSettings.setBehaviourModifier Avoid 1.0
aiSettings.setBehaviourModifier MoveTo 2.0
aiSettings.setBehaviourModifier Idle 0.8
aiSettings.setBehaviourModifier Fire 1.0
aiSettings.setBehaviourModifier Special 1.0
aiSettings.setBehaviourModifier Scout 1.0
aiSettings.setBehaviourModifier TakeCover 0.9
aiSettings.setBehaviourModifier Change 1.0
- Dennis|8749236
- Posts: 239
- Joined: Sun Nov 29, 2009 6:02 am
- Location: Earth
- Contact:
Re: Adding Bots to non Coop maps
wait! how to write the waypoint???
What is the meaning of Life?? (Don't think about it!)
Re: Adding Bots to non Coop maps
Great to hear it worked out!your awesome, thanks it works great. I owe ya
That's a loaded question. For starters, the CTF bases and waypoints are already written there in Strategicareas.con. Russianbase and Thirdbase are the CTF bases, and everything else are either waypoints or control points from coop mode.wait! how to write the waypoint???
You're better off defining all SA's on the map because you're sharing the same pathmaps. Just heat up the SA's you need for that mode. To break it down:
aiStrategicArea.create EastWayPoint 1845.75/1818.5 1851.25/1824 10
1845.75/1818.5 = X/Z - Bottom left corner of SA
1851.25/1824 = X/Z - CENTER of SA.
10 = Starting Temperature before SAI modifies it in strategies.con using objecttype flags .
To view the SA's(waypoints), make these changes (in bold) in your AI.con:
game.showAIstats 1
ai.showBotStats 0
ai.showStrategicAreas 1
Hopefully that helps. LMK. Matt