AI:Development

From Spring
Jump to navigationJump to search

Development < AI Development

How to write a Skirmish AI for Spring

This section gives help on how to create Artificial Intelligence agents that control teams (as if a player) - "Skirmish AI".

The SpringRTS engine interacts with the Skirmish AIs through an "Interface". There are stable (10-2014, Spring v98) interfaces for the languages C/C++ and Java (not currently sure about the others but I think Lua too).


Quick Start

See these pages for tutorials on how to setup a development environment, connect to the appropriate "Interface" and how to build your first example Skirmish AI:


I have setup my development environment. What now?


Overall AI ideas, practical examples, useful resources

  • AI related links - ranging from how to conceptualize AI agents all the way down to how to tackle very specific problems like pathfinding.
  • Useful inferences - how to infer where the opponents might have started, where on the maps can your units go, etc..
  • Springs AI dev forum - comunity's forum dedicated to AI development.
  • AI Interfaces & Wrappers - semi-technical description of the Interfaces that expose the SpringRTS engine to the AI agents.


Other hints, tips and interesting infos

  • AI "frame skipping"

http://springrts.com/phpbb/viewtopic.php?p=463953#p463953
As in: if a Java/C/C++ SkirmishAI gets delayed responding back to the Interface, the SpringRTS engine will wait on the AI. Thus delaying the game, thus not having the AI "skip" frames.


  • Engine commands to control the AIs

In spring you have some control over AIs with these commands:

/aireload
/ailist
/aikill
/aicontrol


  • Lua<-->AI communications [in Spring 0.83+]

http://springrts.com/phpbb/viewtopic.php?f=15&t=26298 He shall say that only it once!


  • Link to source code of the Interface, engine-side

Chances are you'll have doubts about what exactly the commands abc(), qwe() or xyz() do. Asking in the AI forum is a good way to clarify. The most reliable is probably to look at the source code (if you're able to navigate the maze of C++ code in all its glory, that is):
https://github.com/spring/spring/blob/develop/rts/ExternalAI/AICallback.h
https://github.com/spring/spring/blob/develop/rts/ExternalAI/AICallback.cpp