上記のように,ルール定義のフォーマットは(definerule DEFINE_RULE)であり,以下の要素を用いる:
<DEFINE_RULE> : <CLANG_VAR> model <RULE> | <CLANG_VAR> direc <RULE> <RULE> : (<CONDITION> <DIRECTIVE_LIST>) | (<CONDITION> <RULE_LIST>) | <ID_LIST>
各ルールはCLANG_VARの定義に沿う名前を割り当てられる. 更に,ルールには二つのモードのいずれかを指定できる. modelは観察された振舞いを記述するルールを定義し, direcは特定の条件で実行する指示を定義する.
実際のルール内容の指定にはいくつかの方法がある:
直接的な方法. 7.7.3節での例はこのフォーマットによるものである. CONDITIONは状況を意味し,DIRECTIVE_LISTは特定の指示を意味する. リストは任意の人数のプレイヤへの指示を含むことが可能で,同じプレイヤへ 複数の指示を行なうこともできる点に注意. 後者の場合,どの指示を守るかはプレイヤの責任となる.
ルールをより拡張された戦略へと組み合わせるための非常に強力なフォーマッ トである. RULE_LIST内の各ルールは既に条件を含み,この定義はネストされたルールを 形成する. 例えば,いくつかのルールを同時に有効にするために使うことができる. ディフェンダーのホームポジションを指定するいくつかのルール(2番のプレイ ヤに対するpos2aとpos2b,3番のプレイヤに対するpos3aとpos3b)が既に存在し ているとすると,
(definerule defenseformation direc ((bowner our {0}) (pos2a pos3a)))
そして
(definerule offenseformation direc ((bowner opp {0}) (pos2b pos3b)))
を定義することで,ルールが有効になる時(ここでは,どちらのチームがボー ルを所有しているかが条件となる)を指定することができる. このような定義を評価するために,外側の条件は内部の条件へ論理andによっ て分配結合されることになっている. 例えば,pos2aが以下のような定義であれば,
((time 20) (do our {2} (pos (pt -40 10))))
上記の定義は以下のルールを生成することになる.
((and (bowner our {0}) (time 20)) (do our {2} (pos (pt -40 10))))
上記のフォーマットと同様に,既に存在するルールを組み合わせることができ る. 二つのルールが以下のように定義されているとすると:
(definerule position2 direc ((true) (home (pt -40 -10))))
(definerule mark2 direc ((bowner opp {10}) (mark 10)))
2番のプレイヤの振舞いとして以下のように結合できる:
(definerule player2 direc (position2 mark2))