Skip to content

05 Initialize strategic number

Satoshi Teshiba edited this page Dec 16, 2020 · 1 revision

At the beginning of the game, set some strategic numbers to control the initial villagers and the initial scout optimally.

To set strategic numbers, write the following C # code.
SetGathererRateCollection class sets 4 strategic numbers, which are sn-food-gatherer-percentage, sn-wood-gatherer-percentage, sn-gold-gatherer-percentage and sn-stone-gatherer-percentage.

using System;
using System.Collections.ObjectModel;
using LibAoe2AISharp.Framework;
using LibAoe2AISharp.Specifications;
using static LibAoe2AISharp.Specifications.Ope;

namespace Aoe2AISharpSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var gameStarting = new CommandCollection("Init") {
                new InitCivilianActions(),
                new InitMilitaryActions(),
            };

            Console.WriteLine(gameStarting.ToScript());
        }
    }

    public class InitCivilianActions : defrule
    {
        public InitCivilianActions()
        {
            Comment = "Initialize civilian actions";
            Actions.Add(
                new SetGathererRateCollection(100, 0, 0, 0),
                new set_strategic_number(sn.cap_civilian_builders, 200),
                new set_strategic_number(sn.cap_civilian_explorers, 0),
                new set_strategic_number(sn.cap_civilian_gatherers, 200),
                new set_strategic_number(sn.percent_civilian_builders, 10),
                new set_strategic_number(sn.percent_civilian_explorers, 0),
                new set_strategic_number(sn.percent_civilian_gatherers, 90),
                new set_strategic_number(sn.food_dropsite_distance, 3),
                new set_strategic_number(sn.camp_max_distance, 15),
                new set_strategic_number(sn.maximum_town_size, 30),
                new set_strategic_number(sn.mill_max_distance, 30),
                new set_strategic_number(sn.maximum_hunt_drop_distance, 30),
                new set_strategic_number(sn.maximum_food_drop_distance, 30),
                new set_strategic_number(sn.retask_gather_amount, 5),
                new set_strategic_number(sn.max_retask_gather_amount, 5),
                new set_strategic_number(sn.required_forest_tiles, 35),
                new disable_self());
        }
    }

    public class InitMilitaryActions : defrule
    {
        public InitMilitaryActions()
        {
            Comment = "Initialize military actions";
            Actions.Add(
                new set_strategic_number(sn.number_explore_groups, 1),
                new set_strategic_number(sn.minimum_explore_group_size, 1),
                new set_strategic_number(sn.maximum_explore_group_size, 1),
                new set_strategic_number(sn.minimum_civilian_explorers, 0),
                new set_strategic_number(sn.total_number_explorers, 1),
                new set_strategic_number(sn.number_attack_groups, 0),
                new set_strategic_number(sn.minimum_attack_group_size, 15),
                new set_strategic_number(sn.maximum_attack_group_size, 15),
                new set_strategic_number(sn.number_defend_groups, 0),
                new set_strategic_number(sn.minimum_defend_group_size, 10),
                new set_strategic_number(sn.maximum_defend_group_size, 10),
                new set_strategic_number(sn.gather_defense_units, 1),
                new set_strategic_number(sn.task_ungrouped_soldiers, 0),
                new set_strategic_number(sn.group_form_distance, 20),
                new disable_self()
                );
        }
    }
}

Then, it will output the following AI script.

;===============================================================================
;description: Init
; Initialize civilian actions
; Initialize military actions
;===============================================================================
;Initialize civilian actions
(defrule
    (true)
=>
    (set-strategic-number sn-food-gatherer-percentage 100) ;food_gatherer_percentage
    (set-strategic-number sn-wood-gatherer-percentage 0) ;wood_gatherer_percentage
    (set-strategic-number sn-gold-gatherer-percentage 0) ;gold_gatherer_percentage
    (set-strategic-number sn-stone-gatherer-percentage 0) ;stone_gatherer_percentage
    (set-strategic-number sn-cap-civilian-builders 200) ;cap_civilian_builders
    (set-strategic-number sn-cap-civilian-explorers 0) ;cap_civilian_explorers
    (set-strategic-number sn-cap-civilian-gatherers 200) ;cap_civilian_gatherers
    (set-strategic-number sn-percent-civilian-builders 10) ;percent_civilian_builders
    (set-strategic-number sn-percent-civilian-explorers 0) ;percent_civilian_explorers
    (set-strategic-number sn-percent-civilian-gatherers 90) ;percent_civilian_gatherers
    (set-strategic-number sn-food-dropsite-distance 3) ;food_dropsite_distance
    (set-strategic-number sn-camp-max-distance 15) ;camp_max_distance
    (set-strategic-number sn-maximum-town-size 30) ;maximum_town_size
    (set-strategic-number sn-mill-max-distance 30) ;mill_max_distance
    (set-strategic-number sn-maximum-hunt-drop-distance 30) ;maximum_hunt_drop_distance
    (set-strategic-number sn-maximum-food-drop-distance 30) ;maximum_food_drop_distance
    (set-strategic-number sn-retask-gather-amount 5) ;retask_gather_amount
    (set-strategic-number sn-max-retask-gather-amount 5) ;max_retask_gather_amount
    (set-strategic-number sn-required-forest-tiles 35) ;required_forest_tiles
    (disable-self)
)

;Initialize military actions
(defrule
    (true)
=>
    (set-strategic-number sn-number-explore-groups 1) ;number_explore_groups
    (set-strategic-number sn-minimum-explore-group-size 1) ;minimum_explore_group_size
    (set-strategic-number sn-maximum-explore-group-size 1) ;maximum_explore_group_size
    (set-strategic-number sn-minimum-civilian-explorers 0) ;minimum_civilian_explorers
    (set-strategic-number sn-total-number-explorers 1) ;total_number_explorers
    (set-strategic-number sn-number-attack-groups 0) ;number_attack_groups
    (set-strategic-number sn-minimum-attack-group-size 15) ;minimum_attack_group_size
    (set-strategic-number sn-maximum-attack-group-size 15) ;maximum_attack_group_size
    (set-strategic-number sn-number-defend-groups 0) ;number_defend_groups
    (set-strategic-number sn-minimum-defend-group-size 10) ;minimum_defend_group_size
    (set-strategic-number sn-maximum-defend-group-size 10) ;maximum_defend_group_size
    (set-strategic-number sn-gather-defense-units 1) ;gather_defense_units
    (set-strategic-number sn-task-ungrouped-soldiers 0) ;task_ungrouped_soldiers
    (set-strategic-number sn-group-form-distance 20) ;group_form_distance
    (disable-self)
)

Clone this wiki locally