Google Code-in Micro AI Tasks
Information on the Google Code-in Micro AI Tasks will be added in the next couple days.
Contents
Getting Help
This page provides information on the Google Code-in Wesnoth Lua AI tasks. If you need additional help, the preferred way of contacting us is on the Wesnoth IRC channels, specifically #wesnoth-dev. Ask for mattsc or Alarantalara. If we're not online, ask your questions anyway. Somebody else might be able to help, or we will read the logs later and get back to you as soon as possible.
Another way of contacting us is via the Wesnoth forums, either by posting a question there (go to the 'Coders Corner' forum, we have a GCI thread there) or by sending us a personal message (PM).
Getting Started
Programming languages: For working on the GCI Lua AI tasks, you need to have a basic familiarity with the Wesnoth Markup Language (WML) and with the Lua programming language. If you do not know WML or Lua yet, but are familiar with coding in other languages, you can probably acquire the basic skills needed in a few hours. This project does not require any in-depth knowledge of the complexities of either language.
The game: While not absolutely necessary, it would also be helpful to be familiar with Wesnoth gameplay itself.
Add-on: Finally, you need to download the Wesnoth AI-Demos add-on, as this contains the AIs that you will be working with.
If you are already know all of these, you can skip the rest of this section.
Wesnoth
Note that all the GCI work needs to be done with Wesnoth's development version 1.11. It is not necessary that you compile the latest trunk version, downloading the last release of 1.11 (currently 1.11.0) is sufficient.
If you are not familiar with Wesnoth, start by playing a couple scenarios. Yes, part of the assignment is to play a computer game! Some things to try:
- Check out the 'Play' link at the top of this page
- Start one of the four novice level campaigns and play a couple scenarios
- Start a multiplayer game (if this is your first time, you might want to start with a local game against the AI, but there is nothing wrong with playing a networked game against another human and get some advice as you go along)
AI-Demos Add-on
Download the AI-Demos add-on (called 'AI Modification Demos' in the add-ons dialog) and check out the scenarios, in particular those for which GCI tasks exist (see below). Note how the AI behavior differs from the normal Wesnoth AI.
You can download the add-on simply by clicking on 'Add-ons' in the main screen of the game. However, if you want to work on the GCI tasks, you will later need to download it from the AI-Demos github repository anyway, so you might as well do that right now:
- Download the repository to a local directory of your choice
- Set up a link to that directory from directory 'data/add-ons' in the Wesnoth user data directory
Either way, you should now see AI Demos in the campaign list in the game and can start it from there
Wesnoth Markup Language
Wesnoth uses an event-driven markup language, WML, to create scenarios and campaigns. The language manuals can be accessed through the 'Create' link at the top of this page.
You do not require a detailed knowledge of WML for the GCI tasks. You will, however, need to work with existing WML files, so you should at least understand their structure. Have a look at some of the files in the AI-Demos github repository scenarios/ folder. dragon.cfg is an example of a basic scenario that still uses the old AI syntax, while healer_support.cfg is an example of a scenario that uses a Micro AI and the [micro_ai] tag.
Lua
The AIs you will be working with are written in Lua. You do not need a detailed knowledge of Lua for the GCI tasks (there are templates available for all parts of the work), but some basic familiarity is required, in particular with the general language structure and with Lua tables. Check out the Lua documentation, in particular the first few sections of the reference manual.
The use of Lua in Wesnoth is explained on the LuaWML wiki page. Again, it is not necessary that you work through this page in detail, but have a quick look at it and keep it in mind as a reference for the code in the Lua files you will be working with.
Micro AIs Overview
Setting up new AI functionality in Wesnoth from scratch is non-trivial and something most scenario and campaign authors don't want to deal with or don't have the time for. Even including some of the existing AI-Demos in a scenario requires quite a few lines of code (see, for example, prune_cart.cfg), and adapting them to the given scenario can be rather difficult. To facilitate the process, we have recently started to convert the existing AIs in AI-Demos to so-called Micro AIs. Micro AIs can be included in and configured to any suitable scenario with a few simple lines of WML code. Thus, the goal of the GCI Lua AI tasks is to:
- Convert existing AIs to Micro AIs as they are (to enable easy inclusion in scenarios)
- Remove all scenario-specific content from the AIs and replace it by [micro_ai] tag parameters (to enable configurability of the Micro AI to the needs of different scenarios)
See Micro_AIs for the Micro AI formalism and descriptions of the two already converted AIs. That page is also the one you will be editing for documenting your work.
Note: If you are interested in more background on how AIs in Wesnoth work in general, check out Practical_Guide_to_Modifying_AI_Behavior.
Converting an Existing AI to a Micro AI
Converting one of the existing AIs to a Micro AI without changing its behavior is relatively straightforward. The following is a step-by-step guide for this conversion. Note, however, that not every step applies literally to every AI and that some variations might be necessary. Figuring out when it is necessary to deviate somewhat from this procedure is part of the task(s).
micro_ais/ais/micro_ais_macros.cfg
1. Create a macro definition for the new Micro AI in this file. Simply copy-and-paste one of the existing CAs and modify the few AI specific lines (including the comment)
Lua Engine File
2. Locate the Lua engine file in the lua/ directory and move it to the location specified in the wesnoth.require() function in the macro you just defined. Also rename it to match that.
Important: If the engine file contains functions for files other than the CA you are currently converting, moving it will disable those AIs (and possible result in a Wesnoth crash at startup time). In that case, do not move the file, but copy it instead. Having the functions for the AI you are currently converting in both places is not a problem.
micro_ais/ais/micro_ais_wml_tags.lua
This file sets up the keys that can be used in the [micro_ai] tag for the given AI.
3. Duplicate the template section in this file and replace all occurrences of 'template' by the name of the AI you are converting. This adds the the 'add', 'delete' and 'change' actions function calls for the given AI. The functions this calls need to be defined next.
Micro AI Candidate Action and Scenario Files
This file provides the 'add' and 'delete' functionality that is being called by the file in the previous file.
4. Duplicate file micro_ais/ais/template_CAs.lua and rename to match the file name set up in the previous step
5. Locate the scenario file for the AI being converted and find the [candidate_action] tags for the AI being converted. Note that a scenario might contain several different AIs. Only find the candidate actions (CAs) for the AI you are currently converting.
6. In both the 'activate' and 'remove' section, create as many copies of the W.modify_ai{} blocks as there are [candidate_action] tags for the AI to converted and adjust the value of the keys according to each CA. Check the files for one of the existing Micro AIs if unsure how to change things.
At this point, the only remaining step is to add the new functionality to the scenario file.
7. Locate the scenario file for the AI and delete the [ai] tag in the side definition. Note that a scenario file might contain several AIs. Only delete the part that applies to the CA you are currently converting. Replace the [ai] tag by the macro you previously defined. Use the Bottleneck Defense scenario file to check the syntax.
8. Add a prestart event to the scenario file that activates the new Micro AI using the [micro_ai] tag. Again use the Bottleneck Defense scenario file as a template (but delete all keys other than 'side', ai_type' and 'action')
9. Test
10. Commit
11. Document
The Scenario File
Check out scenarios/healer_support.cfg for a scenario file that uses a Micro AI and scenarios/prune-cart.cfg for one that does not. The important part in the former are:
- The MICRO_AI_HEALER_SUPPORT macro: this is defined in file micro_ais/ais/micro_ais_macros.cfg. See below for how to defined this macro.
- The [micro_ai] tag in a prestart event.