Les mots clés du langage

defrule :
Cette instruction crée une nouvelle règle.
Syntaxe : (defrule (condition) => (action))
Exemple : Après 30 secondes de jeu, déclarer forfait.
(defrule
(game-time greater-than 30)
=>
(resign)
)

defconst :
Cette commande permet de créer une constante définie par l'utilisateur.
Syntaxe : (defconst <nom-de-la-constante> <valeur>)
<nom-de-la-constante> est un nom choisi par l'utilisateur, l'utilisation du formatage de nom du système (mots-séparés-par-des-traits par exemple) est recommandée mais pas obligatoire.
<valeur> est un nombre entier compris entre -32768 et 32727 (correspondant au type short pour les programmeurs en C++).
Exemple : définition d'un nombre maximal de péons et utilisation de la constante
(defconst nombre-max-villageois 25)
(defrule
(civilian-population less-than nombre-max-villageois)
(can-train villager)
=>
(train villager)
)

Remarque :
    Les constantes sont très utiles pour nommer les objectifs (<goal-id>), les valeurs des objectifs, les timers (<timer -id>), les railleries (<taunt-id>), etc. Sans les constantes, les exemples cités ci-dessus ne seraient que des nombres sans nom.
Pour plus d'informations sur l'utilisation de defconst, se reporter à la rubrique "Chargement conditionnel et les constantes définies par l'utilisateur"
Astuce :
    Si vous regroupez toutes vos définitions de constantes dans un fichier, il deviendra plus aisé de personnaliser le comportement de votre IA en changeant le nombre représenté par la constante sans avoir à changer cette valeur partout dans le fichier. Dans l'exemple précédent, si vous faîtes référence à nombre-max-villageois à plusieurs endroits dans votre script, ce sera plus facile de changer la valeur 25 de nombre-max-villageois en valeur 15 à un seul endroit.

load :
La commande load vous permet de fournir le nom d'un fichier d'un autre script à charger à l'intérieur de votre propre script. Il devient plus facile d'organiser et de réutiliser des parties de vos scripts à nouveau.
Le langage de script supporte le chargement d'un fichier script à partir d'un autre fichier script. Les fichiers chargés ont un aspect identique au fichier script original, ainsi n'importe quel fichier script peut être chargé par un autre fichier script.
Syntaxe :
(load "filename")
Cette commande peut être insérée n'importe où entre les règles.
Exemple :
(defrule ...........................)
(load "Dark Age Economy")
(defrule ...........................)
Remarque :
Vous remarquerez que le nom de fichier ne possède aucun chemin ni extension. L'interpréteur de script ajoute automatiquement un chemin et une extension. Un f ichier script chargé doit se trouver dans le même répertoire que le fichier chargeant.
Il est important de mentionner le fait que la commande de chargement s'exécute immédiatement. Cela signifie que lorsqu'une commande load est rencontrée, le parsage du fichier courant est interrompu jusqu'à ce que la commande de chargement soit terminée. A ce point, le parsage reprend, commençant par la règle suivant immédiatement la commande load.
Les commandes de chargement peuvent s'emboîter (un script charge un autre script) jusqu'à 10 niveaux de profondeur.
On peut rendre modulaire le comportement d'un JGO en chargeant plusieurs fichiers scripts depuis le fichier script maître. Cette approche n'a d'intérêt que lorsque les fichiers scripts chargés n'ont pas de domaines d'expertise se recouvrant.

load-random :
Une variante de la commande de chargement qui permet un chargement aléatoire de fichier. Cette commande offre la possibilité de rendre la stratégie d'un JGO aléatoire à un niveau supérieur à celui des règles.
Syntaxe :
(load-random <probabilité1> "nom-de-fichier1" ... <probabilitéN> "nom-de-fichierN" "nom-de-fichier-par-défaut")
Comme tous les fichiers partage le même tirage au sort, une commande load-random ne peut aboutir au chargement que d'un seul fichier. Ainsi, la somme des probabilités ne doit jamais être supérieure à 100.
Exemple :
(load-random
20 "fichier1"
10 "fichier2"
40 "fichier3"
"fichier4"
)
Dans cet exemple, le fichier1 a 20% de chance d'être chargé, le fichier2 a 10% de chance d'être chargé, le fichier3 a 40% de chance d'être chargé et le fichier4 est chargé lorsqu'aucun des trois premiers n'a été chargé. Le fichier4 est appelé fichier par défaut.
Cas spécial N° 1 :
(load-random
20 "fichier1"
10 "fichier2"
40 "fichier3"
)
Il n'y a pas de fichier par défaut. Cette syntaxe est correcte et signifie qu'il y a 30% de chance qu'aucun fichier ne soit chargé.
Cas spécial N° 2 :
(load-random "fichier")
Le fichier par défaut sera toujours chargé. Cette syntaxe est correcte mais elle est peut recommandée.