AI:Development milestones

From OpenTTD
Jump to: navigation, search


As development progresses, some important changes are introduced to NoAI system. This page documents them. The newest items are on top.

Contents

12 January 2009

NoAI is merged into trunk. Yay!

20 July 2008 - New way of assigning AIs to a (feature) company

As of 2008-08-20 (r13771), a new method of telling which AI should control which company, and with which settings. Because of that, the '-a' command line option is removed. Soon a GUI will be added to ease up editing, but for now you will need to open up 'openttd.cfg' and add/change the next section:

[ai_players]
none = 
YourAI =

You can define up to 8 slots. For each AI starting on that slot (company), that AI you assigned will be started. If a human player starts a company on that slot, the AI info is ignored. 'none' indicates a human company.

20 May 2008 - main.nut is split in two

As of 2008-05-20 (r13194), a new method of registering your AI is in place. This method solves many of the old problems. Like if you have a compile-problem now in your main.nut, at start-up this no longer gives an error. The error shows up when the AI wants to start, and this way we can redirect it to the AI Debug window. This solves the problem where the user had no idea why the AI didn't show up (as many (Windows) users never look at the console). The only thing important now, is that at start-up your info.nut is correct. Which should not be too difficult for most people.

Upgrading from the old system

Basically, what you should do, is move a small part of your main.nut to info.nut. Example:

class FWrightAI extends AIFactory {
	function GetAuthor()      { return "OpenTTD Dev Team"; }
	function GetName()        { return "WrightAI"; }
	function GetDescription() { return "A simple AI that tries to beat you with only aircrafts"; }
	function GetVersion()     { return 1.1; }
	function GetDate()        { return "2008-02-24"; }
	function CreateInstance() { return "WrightAI"; }
}

/* Tell the core we are an AI */
iFWrightAI <- FWrightAI();

Should be removed and info.nut should get:

class WrightAI extends AIInfo {
	function GetAuthor()      { return "OpenTTD Dev Team"; }
	function GetName()        { return "WrightAI"; }
	function GetDescription() { return "A simple AI that tries to beat you with only aircrafts"; }
	function GetVersion()     { return 1.1; }
	function GetDate()        { return "2008-02-24"; }
	function CreateInstance() { return "WrightAI"; }
}

RegisterAI(WrightAI());

Things to remember:

  • the <- line becomes RegisterAI
  • AIFactory becomes AIInfo.

17 March 2008 - C++ support is dropped

As of 17 March 2008, it is no longer possible to write your AI in C++. The only language to write your AI in is Squirrel. This because of several reasons, some listed below:

  • It is hard to maintain a framework that supports both Squirrel and C++.
  • Squirrel limited us to make cool stuff in C++, and C++ limited us to make cool stuff in SQ.
  • When I have an AI in C++, and you want to try it, I need to send you the source and you need to recompile OpenTTD.
  • Even if the last point was resolved with modules, it wouldn't be cross-platform compatible.
  • Squirrel is mature enough to take over.
  • Squirrel allows easy trading AIs between users.
  • If you make a mistake in C++, you can crash the game. In SQ we can contain any problem within the Virtual Machine and only kill the AI.

Of course there are some downsides, which for the records are listed too:

  • C++ is faster, although the difference isn't as big as you might expect.
  • C++ allows pointer-toying. Although this is also a bad thing, it can work for the best

So to summarize it: by removing C++ as possible language to write your AI in, we gain simplicity in the framework, we gain security, and most of all: portability. For those reasons it was unanimous decided to remove C++ as possible language for the NoAI framework.

Personal tools