AIの作成の豆知識

マニュアルにないAIの仕様についてまとめてあります。

内政の豆知識

羊を町の中心の上で食べる
通常、発見された羊は町の中心か粉引き所の近くまで移動します。稀に、敵の斥候に羊が奪われ奪われた羊が、ちょうど自分の町の中心の上を通過中に奪い返すと、AIでも町の中心の上で羊を食べることができます。

猪を狩る
AIでは猪は狩れない仕様になっています。「sn-minimum-boar-hunt-group-size」や「sn-maximum-hunt-drop-distance」の値を変更しても猪を狩ることはできません。これは実際にAIで猪を狩ろうとするとAIの町の人が死にすぎるため、AIの動作として完全に猪を狩れない仕様にしたという話があります。

複数人で城を建設する
AIの仕様では、どの建物も1人で建設しに行きます。しかし、町の人は建物の建設が完了すると近くの建設中の建物の建設を手伝いに来るので、これを上手く利用することで複数人で城を建設します。町の中心の周りには、畑を張る人と家を建設する人が常にいるはずなので「sn-maximum-town-size」の値を小さくし、城を町の中心の近くに建設することで高確率で城を複数人で建設することができます。

町の人の上限
町の人は100人までしか仕事をしません。101人目以降の町の人は待機中の町の人となります。人口上限200設定のゲームでは後半が厳しいので、状況によっては、聖なる箱、荷馬車、漁船など活用しても良いでしょう。

港の建設
遊牧MAPでは港の建設ができません。また、チームごとの島MAPで雪の地形になった場合、雪の海岸線には港を建設できません。

遊牧MAP
遊牧MAPでは町の中心が建設完了するまで他の建物は建設できないようです。また町の中心の建設完了前に羊を発見した場合、羊はその場所から移動して来ません。

建設中の建物の破壊
建設中の建物が敵に破壊されると、その種類の建物の建設ができなくなります。たとえば、塔を建設中に敵に叩き壊されると、以降、塔の建設命令は実行されなくなります。有名で致命的なバグです。

軍事の豆知識

劣勢になったら退却する
退却するというコマンドはAIにはありません。しかしタウンサイズアタックという攻撃方法で攻めている場合は、後退することはできます。タウンサイズアタックとは、守備軍が自国の町の範囲内の敵建物を攻撃するという性質を利用し、「sn-maximum-town-size」の値を徐々に大きくすることで守備動作によって敵を攻撃する方法です。タウンサイズアタックの場合は、「sn-maximum-town-size」を小さな値にすることによって、自国により近い地点を攻撃目標とするようになり、後退できます。私のAIの「kosmos」では、タウンサイズアタックで攻撃中に敵から10本以上の矢(たいていは町の中心からの矢)で攻撃されたら後退するようにしています。「自軍に飛んでくる矢」の数は(unit-type-count 112 > 0)のようにユニットID指定でカウントできます。

敵の壁を攻撃する
攻撃グループは、なかなか壁を攻撃目標に選びません。壁で囲われている中の敵を攻撃目標に選んだ場合、攻撃目標にたどり着けず、壁の周りをウロウロしている状態になります。しかし、守備グループによる攻撃ならば完全に壁を破壊することが可能です。守備グループは自国の町の範囲内にある敵建物を完全に破壊しようとする性質があるので、敵の壁が範囲に入るように「sn-maximum-town-size」を大きくすると、守備グループは壁を破壊しに行きます。

町の中心が攻撃されているか判定する
敵に「sn-maximum-town-size」の範囲内を攻撃されると「town-under-attack」状態になりますが、これは戦士育成所が攻撃されても町の中心が攻撃されても同じです。町の中心が攻撃を受けているかどうか判定するには、町の中心が放っている矢が1以上かどうかを判定します。町の中心の矢はユニットID指定で(unit-type-count 54>= 1)のようにカウントします。私のAIの「kosmos」では、町の中心が攻撃されると防衛用に「矢羽根」の研究をするようにしています。

探索グループを減らす
一度探索グループに割り当てられた軍事ユニットは、「sn-number-explore-groups」の数を減らしても、守備グループや攻撃グループに戻すことはできません。そのため探索グループ数を増やさずうまく探索する必要があります。探索領域を広げる方法としては「sn-task-ungrouped-soldiers」により軍を散開させる、「attack-now」で1人だけ攻撃させて敵までの道を開拓する、前哨を建設する、などがあります。

遠投投石機の数
遠投投石機の数は(unit-type-count-total trebuchet >= 1)では正確な数をカウントすることができません。遠投投石機は、「梱包状態」と「組立て後」で別のユニットとしてカウントされます。AIスクリプトの「trebuchet」というのは「梱包状態」の遠投投石機をさすので、上記のスクリプトでは遠投投石機を組み立てた瞬間に「trebuchet」が0個とカウントされます。「組立て後」の遠投投石機を指すキーワードがないので、ユニットIDを直接使って(unit-type-count-total 42>= 1)とすることで「組立て後」の遠投投石機があるか調べることができます。尚、「梱包状態」の遠投投石機と「組立て後」の遠投投石機の合計数をカウントすることはできないので、スクリプトを工夫する必要があります。

戦士育成所でハスカールを生産する
城で生産するハスカールと戦士育成所で生産するハスカールは、見た目は同じですが実は別ユニットです。城からのハスカールは(train huskarl-line)で生産できますが、戦士育成所のハスカールは(train 759)というようにユニットIDを指定することで生産できます。同様に、戦士育成所のエリートハスカールは(train 761)です。

無秩序とパーフュージョンを研究する
通常の文明ではユニークテクノロジーは1つなので、(research my-unique-research)で研究できますが、ゴートの場合はユニークテクノロジーが2つあります。それぞれを研究するためには研究IDを直接指定することで研究できます。無秩序の研究は(research 16)でパーフュージョンの研究は(research 457)です。

薬草学を研究する
通常の研究項目には「ri-gold-mining」のようなキーワードが割り当てられていますが、例外的に薬草学には割り当てられていません。薬草学の研究は(research 441)と研究IDを指定することで研究できます。

諜報を研究する
AIの命令には「spy」というアクションがありますが、これでは諜報コマンドは実行されません。また「can-spy」というファクトも諜報ができるかの判定には使えません。諜報可能の判定は(can-research 408)、研究は(research 408)と研究IDを指定することで研究できます。