; ============== GROUPS - most of these will work for any file (defrule (true) => ;(set-initial-exploration-required 0) (set-strategic-number sn-maximum-town-size 35) (set-strategic-number sn-camp-max-distance 30) (set-strategic-number sn-mill-max-distance 15) (set-strategic-number sn-percent-enemy-sighted-response 50) (set-strategic-number sn-enemy-sighted-response-distance 25) (set-strategic-number sn-blot-exploration-map 1) (set-strategic-number sn-number-explore-groups 1) (set-strategic-number sn-total-number-explorers 1) (disable-self) ) ; ============== ATTACK GROUPS - changing percent attack soldiers will make an AI weak or tough ;(defrule ; (current-age == castle-age) ; (true) ;=> ; (set-strategic-number sn-task-ungrouped-soldiers 10) ; (set-strategic-number sn-percent-attack-soldiers 90) ; (disable-self) ;) ; ================== RESIGNING - resigns if it can't train villagers (defrule (building-type-count town-center less-than 1) (unit-type-count-total villager < 2) (not (can-train villager) ) => (resign) (disable-self) ) ; ============== VILLAGER ASSIGNMENT - most of these will work for any file (defrule (current-age == dark-age) => (set-strategic-number sn-percent-civilian-explorers 5) (set-strategic-number sn-percent-civilian-builders 10) (set-strategic-number sn-percent-civilian-gatherers 85) (set-strategic-number sn-cap-civilian-explorers 0) (set-strategic-number sn-cap-civilian-gatherers 100) (set-strategic-number sn-food-gatherer-percentage 50) (set-strategic-number sn-gold-gatherer-percentage 20) (set-strategic-number sn-stone-gatherer-percentage 0) (set-strategic-number sn-wood-gatherer-percentage 30) (set-strategic-number sn-maximum-gold-drop-distance 20) (set-strategic-number sn-maximum-stone-drop-distance 20) (set-strategic-number sn-maximum-food-drop-distance 20) (disable-self) ) (defrule (building-type-count-total mill less-than 1) => (set-strategic-number sn-percent-civilian-builders 90) ) (defrule (current-age == feudal-age) => (set-strategic-number sn-percent-civilian-explorers 0) (set-strategic-number sn-percent-civilian-builders 15) (set-strategic-number sn-percent-civilian-gatherers 85) (set-strategic-number sn-cap-civilian-explorers 0) (set-strategic-number sn-cap-civilian-gatherers 100) (set-strategic-number sn-food-gatherer-percentage 35) (set-strategic-number sn-gold-gatherer-percentage 40) (set-strategic-number sn-stone-gatherer-percentage 0) (set-strategic-number sn-wood-gatherer-percentage 25) (set-strategic-number sn-maximum-gold-drop-distance 20) (set-strategic-number sn-maximum-stone-drop-distance 20) (set-strategic-number sn-maximum-food-drop-distance 20) (disable-self) ) (defrule (or (current-age == castle-age) (current-age == imperial-age) ) => (set-strategic-number sn-percent-civilian-explorers 0) (set-strategic-number sn-percent-civilian-builders 15) (set-strategic-number sn-percent-civilian-gatherers 85) (set-strategic-number sn-cap-civilian-explorers 0) (set-strategic-number sn-cap-civilian-gatherers 100) (set-strategic-number sn-food-gatherer-percentage 30) (set-strategic-number sn-gold-gatherer-percentage 30) (set-strategic-number sn-stone-gatherer-percentage 10) (set-strategic-number sn-wood-gatherer-percentage 30) (set-strategic-number sn-maximum-gold-drop-distance 20) (set-strategic-number sn-maximum-stone-drop-distance 20) (set-strategic-number sn-maximum-food-drop-distance 20) (disable-self) ) ; ============== ATTACKING - The AI will attack once at 800 seconds and then ; again every 1000 sec, provided it has enough defense soldiers. ;(defrule ; (game-time > 700) ;=> ; (attack-now) ; (enable-timer 7 700) ; (disable-self) ; (chat-local-to-self "first attack") ;) ;(defrule ; (timer-triggered 7) ; (defend-soldier-count >= 2) ;=> ; (attack-now) ; (disable-timer 7) ; (enable-timer 7 1000) ; (chat-local-to-self "other attacks") ;) ; ============== BUILD LISTS (defrule (unit-type-count-total villager less-than 20) (can-train villager) => (train villager) ) (defrule (building-type-count-total mill less-than 1) => (build mill) ) (defrule (current-age != dark-age) (building-type-count-total barracks less-than 1) (can-build barracks) => (build barracks) ) ;maintain housing (defrule (housing-headroom less-than 4) (population-headroom greater-than 0) (can-build house) => (build house) ) ;maintain a town center (defrule (game-time greater-than 45) (building-type-count town-center less-than 1) (can-build town-center) => (build town-center) ) (defrule (current-age == castle-age) (building-type-count town-center less-than 2) (can-build town-center) => (build town-center) ) (defrule (gold-amount > 1250) (wood-amount < 1100) (can-buy-commodity wood) (commodity-buying-price wood < 50) => (chat-local-to-self "excess gold; buy wood") (release-escrow gold) (buy-commodity wood) ) (defrule (gold-amount > 1250) (food-amount < 1600) (can-buy-commodity food) (commodity-buying-price food < 50) => (chat-local-to-self "excess gold; buy food") (release-escrow gold) (buy-commodity food) ) (defrule (gold-amount > 1400) (stone-amount < 650) (can-buy-commodity stone) (commodity-buying-price stone < 200) => (chat-local-to-self "excess gold; buy stone") (release-escrow gold) (buy-commodity stone) ) (defrule (building-type-count-total stable less-than 2) (can-build stable) => (build stable) ) (defrule (building-type-count-total blacksmith less-than 1) (can-build blacksmith) => (build blacksmith) ) (defrule (building-type-count-total monastery less-than 1) (can-build monastery) => (build monastery) ) (defrule (building-type-count-total castle less-than 1) (can-build castle) => (build castle) ) (defrule (building-type-count-total siege-workshop less-than 1) (can-build siege-workshop) => (build siege-workshop) ) (defrule (building-type-count-total farm less-than 4) (can-build farm) => (build farm) ) (defrule (food-amount less-than 100) (building-type-count-total farm less-than 6) (can-build farm) => (build farm) ) (defrule (resource-found wood) (building-type-count-total lumber-camp < 2) (dropsite-min-distance wood > 5) (can-build lumber-camp) => (build lumber-camp) ) (defrule (resource-found gold) (building-type-count-total mining-camp < 5) (dropsite-min-distance gold > 7) (can-build mining-camp) => (build mining-camp) ) (defrule (resource-found stone) (building-type-count-total mining-camp < 5) (dropsite-min-distance stone > 7) (can-build mining-camp) => (build mining-camp) ) ; ============== MILITARY UNITS (defrule (unit-type-count-total knight-line < 20) (can-train knight-line) => (train knight-line) (chat-local-to-self "knight") ) (defrule (unit-type-count-total militiaman-line < 50) (can-train militiaman-line) => (train militiaman-line) (chat-local-to-self "infantry") ) (defrule (unit-type-count-total scout-cavalry-line < 1) (can-train scout-cavalry-line) => (train scout-cavalry-line) (chat-local-to-self "scout") ) (defrule (unit-type-count-total my-unique-unit-line < 15) (can-train my-unique-unit-line) => (train my-unique-unit-line) (chat-local-to-self "unique unit") ) (defrule (unit-type-count-total trebuchet < 9) (can-train trebuchet) => (train trebuchet) (chat-local-to-self "trebuchet") ) (defrule (unit-type-count-total monk < 20) (can-train monk) => (train monk) (chat-local-to-self "monk") ) (defrule (not (town-under-attack)) (unit-type-count-total battering-ram-line < 4) (can-train battering-ram-line) => (train battering-ram-line) ) ; ============== ADVANCING IN AGE ; Dark to Feudal (defrule (unit-type-count-total villager > 20) (current-age == dark-age) => ;(set-goal 16 96) (disable-self) ) (defrule ;(goal 16 96) (can-research-with-escrow feudal-age) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research feudal-age) (chat-local-to-self "rising to feudal") ;(set-goal 16 0) ) ; Feudal to Castle (defrule (unit-type-count-total villager > 25) (current-age == feudal-age) => ;(set-goal 16 98) (disable-self) ) (defrule ;(goal 16 98) (wood-amount greater-than 600) (can-sell-commodity wood) => (chat-local-to-self "selling wood for castle gold") (sell-commodity wood) ) (defrule ;(goal 16 98) (stone-amount greater-than 500) (commodity-selling-price stone greater-than 50) (can-sell-commodity stone) => (sell-commodity stone) ) (defrule ;(goal 16 98) (food-amount greater-or-equal 1100) (can-sell-commodity food) => (chat-local-to-self "selling food for castle gold") (sell-commodity food) ) ;getting needed food (defrule ;(goal 16 98) (gold-amount greater-or-equal 1000) (commodity-buying-price food less-than 200) (can-buy-commodity food) => (chat-local-to-self "buying castle food") (buy-commodity food) ) ; advance to castle age if possible. (defrule ; (goal 16 98) (can-research-with-escrow castle-age) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research castle-age) (chat-local-to-self "rising to castle") (set-goal 16 0) ) ;(defrule ; (goal want-more-town-centers 0) ; (or (unit-type-count-total villager >= min-villagers) ; (food-amount >= 200)) ; (current-age= imperial-age) ;(wall-completed-percentage wall-perimeter < required-wall-percent) ;(stone-amount < 200) ;=> ;(set-goal need-stone-goal 1) ;) (defrule (or (unit-type-count-total villager >= 45) (food-amount >= 200)) (current-age == imperial-age) (not (town-under-attack)) ; (not (goal is-zero-goal required-wall-percent)) (can-build-wall 2 stone-wall-line) => (build-wall 2 stone-wall-line) ) ;(defrule ; (true) ;=> ; (set-goal escrow-food-goal 0) ; (set-goal escrow-wood-goal 0) ; (set-goal escrow-gold-goal 0) ; (set-goal escrow-stone-goal 0) ; (set-goal is-zero-goal 0) ; (set-goal save-food-goal 0) ; (set-goal save-wood-goal 0) ; (set-goal save-gold-goal 0) ; (set-goal save-stone-goal 0) ; (set-goal needed-gold-goal 0) ; (set-goal needed-stone-goal 0) ; (disable-self) ;) ; Castle to Imperial (defrule (unit-type-count-total villager > 25) (current-age == castle-age) => ; (set-goal 16 99) (disable-self) ) (defrule ;(goal 16 99) (wood-amount greater-than 600) (can-sell-commodity wood) => (chat-local-to-self "selling wood for imperial gold") (sell-commodity wood) ) (defrule ;(goal 16 99) (stone-amount greater-than 500) (commodity-selling-price stone greater-than 50) (can-sell-commodity stone) => (chat-local-to-self "selling stone for imperial gold") (sell-commodity stone) ) (defrule ;(goal 16 99) (food-amount greater-or-equal 1100) (can-sell-commodity food) => (chat-local-to-self "selling food for imperial gold") (sell-commodity food) ) ;getting needed food (defrule ;(goal 16 99) (gold-amount greater-or-equal 1000) (commodity-buying-price food less-than 200) (can-buy-commodity food) => (chat-local-to-self "buying imperial food") (buy-commodity food) ) ; advance to imperial age if possible. (defrule ; (goal 16 99) (can-research-with-escrow imperial-age) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research imperial-age) (chat-local-to-self "rising to imperial") (set-goal 16 0) ) ;defrule ; (true) ;=> ; (set-goal need-to-explore-now 0) ;) ;(defrule ; (goal is-zero-goal 1) ; (goal build-limits build-anything) ; (not (goal current-age-goal dark-age)) ; (wall-invisible-percentage wall-perimeter > 1) ;=> ; (set-goal need-to-explore-now 10) ;) ;(defrule ; (goal is-zero-goal 1) ; (goal build-limits build-anything) ; (not (goal current-age-goal dark-age)) ; (wall-invisible-percentage wall-perimeter > 5) ;=> ; (set-goal need-to-explore-now 50) ;) ; ========================== UPGRADES - same rules for all civs. ; If the AI has a certain number of units, it tries to upgrade them. ; problem with escrow - release excess (defrule (or (or (escrow-amount wood > 2000) (escrow-amount food > 2000)) (or (escrow-amount gold > 3000) (escrow-amount stone > 3000))) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (set-goal 16 0) ) ; sets initial goal for escrow to make sure there are villagers (defrule (unit-type-count villager >= 15) => ; (set-goal 16 0) (disable-self) ) ; sets escrow (defrule (true) => (set-escrow-percentage wood 40) (set-escrow-percentage food 40) (set-escrow-percentage gold 40) (set-escrow-percentage stone 40) ) ; ///////////////////////////////////////////////////// ;UNIT UPGRADES (defrule ;(goal 16 0) (can-research-with-escrow my-unique-unit-upgrade) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research my-unique-unit-upgrade) (chat-local-to-self "research elite uniques") ) (defrule ;(goal 16 0) (unit-type-count militiaman > 4) (can-research-with-escrow ri-man-at-arms) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-man-at-arms) (chat-local-to-self "research man-at-arms") ) (defrule ;(goal 16 0) (unit-type-count man-at-arms > 6) (can-research-with-escrow ri-long-swordsman) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-long-swordsman) (chat-local-to-self "research long swordsman ") ) (defrule ;(goal 16 0) (unit-type-count long-swordsman > 6) (can-research-with-escrow ri-two-handed-swordsman) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-two-handed-swordsman) (chat-local-to-self "research two-handed-swordsman") ) (defrule ;(goal 16 0) (unit-type-count two-handed-swordsman > 6) (can-research-with-escrow ri-champion) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-champion) (chat-local-to-self "research champion") ) (defrule ;(goal 16 0) (unit-type-count-total spearman > 2) (can-research-with-escrow ri-pikeman) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-pikeman) (chat-local-to-self "research pike") ) (defrule ;(goal 16 0) (unit-type-count-total scout-cavalry > 2) (can-research-with-escrow ri-light-cavalry) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-light-cavalry) (chat-local-to-self "research light-cavalry") ) (defrule ;(goal 16 0) (unit-type-count-total camel > 2) (can-research-with-escrow ri-heavy-camel) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-heavy-camel) (chat-local-to-self "research heavy camel") ) (defrule ;(goal 16 0) (unit-type-count-total knight > 2) (can-research-with-escrow ri-cavalier) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-cavalier) (chat-local-to-self "research cavalier") ) (defrule ;(goal 16 0) (unit-type-count-total cavalier > 2) (can-research-with-escrow ri-paladin) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-paladin) (chat-local-to-self "research paladin") ) (defrule ;(goal 16 0) (unit-type-count archer > 6) (can-research-with-escrow ri-crossbow) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-crossbow) (chat-local-to-self "research crossbow") ) (defrule ;(goal 16 0) (unit-type-count crossbowman > 6) (can-research-with-escrow ri-arbalest) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-arbalest) (chat-local-to-self "research arbalest") ) (defrule ;(goal 16 0) (unit-type-count cavalry-archer > 6) (can-research-with-escrow ri-heavy-cavalry-archer) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-heavy-cavalry-archer) (chat-local-to-self "research heavy-cavalry-archer") ) (defrule (unit-type-count-total skirmisher > 2) (can-research-with-escrow ri-elite-skirmisher) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-elite-skirmisher) (chat-local-to-self "research elite skirmisher") ) (defrule ;(goal 16 0) (unit-type-count scorpion > 4) (can-research-with-escrow ri-heavy-scorpion) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-heavy-scorpion) ;(chat-local-to-self "research heavy-scorpion") ) (defrule ;(goal 16 0) (unit-type-count battering-ram > 2) (can-research-with-escrow ri-capped-ram) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-capped-ram) ;(chat-local-to-self "research capped ram") ) (defrule (goal 16 0) (unit-type-count capped-ram > 2) (can-research-with-escrow ri-siege-ram) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-siege-ram) ;(chat-local-to-self "research siege-ram") ) (defrule ;(goal 16 0) (unit-type-count mangonel > 3) (can-research-with-escrow ri-onager) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-onager) ;(chat-local-to-self "research onager") ) (defrule ;(goal 16 0) (unit-type-count onager > 3) (can-research-with-escrow ri-siege-onager) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-siege-onager) ;(chat-local-to-self "research siege onager") ) ; ////////////////////////RESEARCH////////////////// (defrule ;(goal 16 0) (can-research-with-escrow ri-forging) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-forging) ;(chat-local-to-self "research forging") ) (defrule ;(goal 16 0) (can-research-with-escrow ri-iron-casting) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-iron-casting) ;(chat-local-to-self "research iron-casting") ) (defrule ;(goal 16 0) (can-research-with-escrow ri-blast-furnace) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-blast-furnace) ;(chat-local-to-self "research blast-furnace") ) ;ARCHER UPGRADES -- cost food/gold (defrule ;(goal 16 0) (can-research-with-escrow ri-fletching) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-fletching) ;(chat-local-to-self "research fletching") ) (defrule ;(goal 16 0) (can-research-with-escrow ri-bodkin-arrow) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-bodkin-arrow) ;(chat-local-to-self "research bodkin-arrow") ) (defrule ;(goal 16 0) (can-research-with-escrow ri-bracer) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-bracer) ;(chat-local-to-self "research bracer") ) (defrule ;(goal 16 0) (or (unit-type-count-total archer-line > 3) (or (unit-type-count-total skirmisher-line > 3) (unit-type-count-total cavalry-archer-line > 3) ) ) (can-research-with-escrow ri-padded-archer-armor) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-padded-archer-armor) ;(chat-local-to-self "research padded-archer-armor") ) (defrule ;(goal 16 0) (or (unit-type-count-total archer-line > 3) (or (unit-type-count-total skirmisher-line > 3) (unit-type-count-total cavalry-archer-line > 3) ) ) (can-research-with-escrow ri-leather-archer-armor) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-leather-archer-armor) ;(chat-local-to-self "research leather-archer-armor") ) (defrule ;(goal 16 0) (or (unit-type-count-total archer-line > 3) (or (unit-type-count-total skirmisher-line > 3) (unit-type-count-total cavalry-archer-line > 3) ) ) (can-research-with-escrow ri-ring-archer-armor) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-ring-archer-armor) ;(chat-local-to-self "research ring-archer-armor") ) (defrule ;(goal 16 0) (or (unit-type-count-total militiaman-line > 3) (unit-type-count-total spearman-line > 3) ) (can-research-with-escrow ri-scale-mail) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-scale-mail) ;(chat-local-to-self "research scale-mail") ) (defrule ;(goal 16 0) (or (unit-type-count-total militiaman-line > 3) (unit-type-count-total spearman-line > 3) ) (can-research-with-escrow ri-chain-mail) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-chain-mail) ;(chat-local-to-self "research chain-mail") ) (defrule ;(goal 16 0) (or (unit-type-count-total militiaman-line > 3) (unit-type-count-total spearman-line > 3) ) (can-research-with-escrow ri-plate-mail) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-plate-mail) ;(chat-local-to-self "research plate-mail") ) (defrule ;(goal 16 0) (or (unit-type-count-total militiaman-line > 3) (unit-type-count-total spearman-line > 3) ) (can-research-with-escrow ri-tracking) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-tracking) ;(chat-local-to-self "research tracking") ) (defrule ;(goal 16 0) (or (unit-type-count-total militiaman-line > 3) (unit-type-count-total spearman-line > 3) ) (can-research-with-escrow ri-squires) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-squires) ;(chat-local-to-self "research squires") ) (defrule ;(goal 16 0) (or (unit-type-count-total knight-line > 3) (unit-type-count-total scout-cavalry-line > 3) ) (can-research-with-escrow ri-scale-barding) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-scale-barding) ;(chat-local-to-self "research scale-barding") ) (defrule ;(goal 16 0) (or (unit-type-count-total knight-line > 3) (unit-type-count-total scout-cavalry-line > 3) ) (can-research-with-escrow ri-chain-barding) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-chain-barding) ;(chat-local-to-self "research chain-barding") ) (defrule ;(goal 16 0) (or (unit-type-count-total knight-line > 3) (unit-type-count-total scout-cavalry-line > 3) ) (can-research-with-escrow ri-plate-barding) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-plate-barding) ;(chat-local-to-self "research plate-barding") ) (defrule ;(goal 16 0) (or (unit-type-count-total cavalry-archer-line > 3) (or (unit-type-count-total knight-line > 3) (unit-type-count-total scout-cavalry-line > 3) ) ) (can-research-with-escrow ri-husbandry) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-husbandry) ;(chat-local-to-self "research husbandry") ) ; /////////////////////SIEGE RESEARCH ITEMS/////////////////////////// (defrule ;(goal 16 0) (can-research-with-escrow ri-siege-engineers) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-siege-engineers) ;(chat-local-to-self "research siege-engineers") ) ;FORTRESS UPGRADES (defrule ;(goal 16 0) (can-research-with-escrow ri-hoardings) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-hoardings) ;(chat-local-to-self "research hoardings") ) ;OTHER RESEARCH ITEMS (defrule ;(goal 16 0) (can-research-with-escrow ri-ballistics) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-ballistics) ; (chat-local-to-self "research ballistics") ) (defrule ; (goal 16 0) (can-research-with-escrow ri-chemistry) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-chemistry) ; (chat-local-to-self "research chemistry") ) (defrule ; (goal 16 0) (can-research-with-escrow ri-conscription) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-conscription) ; (chat-local-to-self "research conscription") ) ; //////////////////////ECONOMIC//////////////////////// ;mining-camp items (defrule ; (goal 16 0) (can-research-with-escrow ri-gold-mining) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-gold-mining) ; (chat-local-to-self "research gold mining") ) (defrule ; (goal 16 0) (can-research-with-escrow ri-gold-shaft-mining) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-gold-shaft-mining) ; (chat-local-to-self "research gold shaft mining") ) (defrule ; (goal 16 0) (building-type-count mining-camp > 1) (can-research-with-escrow ri-stone-mining) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-stone-mining) ; (chat-local-to-self "research stone mining") ) (defrule ; (goal 16 0) (building-type-count mining-camp > 1) (can-research-with-escrow ri-stone-shaft-mining) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-stone-shaft-mining) ; (chat-local-to-self "research stone shaft mining") ) ;mill items (defrule ; (goal 16 0) (can-research-with-escrow ri-horse-collar) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-horse-collar) ; (chat-local-to-self "research horse collar") ) (defrule ; (goal 16 0) (can-research-with-escrow ri-heavy-plow) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-heavy-plow) ; (chat-local-to-self "research heavy plow") ) (defrule ; (goal 16 0) (can-research-with-escrow ri-crop-rotation) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-crop-rotation) ; (chat-local-to-self "research crop rotation") ) ;saw mill (defrule ; (goal 16 0) (can-research-with-escrow ri-double-bit-axe) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-double-bit-axe) ; (chat-local-to-self "research double bit axe") ) (defrule ; (goal 16 0) (can-research-with-escrow ri-bow-saw) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-bow-saw) ; (chat-local-to-self "research bow saw") ) (defrule ; (goal 16 0) (can-research-with-escrow ri-two-man-saw) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-two-man-saw) ; (chat-local-to-self "research 2 man saw") ) ;university stuff (defrule ; (goal 16 0) (can-research-with-escrow ri-masonry) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-masonry) ; (chat-local-to-self "research masonry") ) (defrule ; (goal 16 0) (can-research-with-escrow ri-architecture) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-architecture) ; (chat-local-to-self "research architecture") ) (defrule ; (goal 16 0) (can-research-with-escrow ri-stonecutting) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-stonecutting) ; (chat-local-to-self "research stonecutting") ) ;market & town center (defrule ; (goal 16 0) (can-research-with-escrow ri-guilds) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-guilds) ; (chat-local-to-self "research guilds") ) (defrule ; (goal 16 0) (current-age == dark-age) (can-research-with-escrow ri-loom) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-loom) ; (chat-local-to-self "research loom") ) (defrule ; (goal 16 0) (can-research-with-escrow ri-hand-cart) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-hand-cart) ; (chat-local-to-self "research hand-cart") ) (defrule ; (goal 16 0) (can-research-with-escrow ri-wheel-barrow) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-wheel-barrow) ; (chat-local-to-self "research wheelbarrow") ) (defrule ; (goal 16 0) (or (players-stance any-computer ally) (players-stance any-human ally) ) (can-research-with-escrow ri-coinage) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-coinage) ; (chat-local-to-self "research coinage") ) (defrule ; (goal 16 0) (or (players-stance any-computer ally) (players-stance any-human ally) ) (can-research-with-escrow ri-banking) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-banking) ; (chat-local-to-self "research banking") ) ; ////////////////////MONK///////////////// (defrule ; (goal 16 0) (unit-type-count-total monk > 2) (can-research-with-escrow ri-block-printing) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-block-printing) ; (chat-local-to-self "research block printing") ) ;TOWERS (defrule ; (goal 16 0) (building-type-count-total watch-tower > 1) (can-research-with-escrow ri-guard-tower) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-guard-tower) ; (chat-local-to-self "research guard tower") ) (defrule ; (goal 16 0) (building-type-count-total guard-tower > 1) (can-research-with-escrow ri-keep) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-keep) ; (chat-local-to-self "research keep") ) (defrule ; (goal 16 0) (building-type-count university > 0) (building-type-count-total watch-tower-line > 3) (research-available ri-bombard-tower) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-bombard-tower) ; (chat-local-to-self "research bombard-tower") ) (defrule ; (goal 16 0) (building-type-count-total watch-tower-line > 3) (can-research-with-escrow ri-heated-shot) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-heated-shot) ; (chat-local-to-self "research heated-shot") ) (defrule ; (goal 16 0) (or (building-type-count-total castle > 0) (building-type-count-total watch-tower-line > 2) ) (can-research-with-escrow ri-murder-holes) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-murder-holes) ; (chat-local-to-self "research murder-holes") ) (defrule ; (goal 16 0) (or (building-type-count-total castle > 0) (building-type-count-total watch-tower-line > 2) ) (can-research-with-escrow ri-fortified-wall) => (release-escrow wood) (release-escrow food) (release-escrow gold) (release-escrow stone) (research ri-fortified-wall) ; (chat-local-to-self "research fortifications") ) ; ================ MARKET - buys/sells when the price is right and stockpile low ; ///////////////////////// FEUDAL (defrule (current-age == feudal-age) (gold-amount >= 500) (wood-amount <= 100) (commodity-buying-price wood <= 100) (can-buy-commodity wood) => (chat-local-to-self "Wood panic") (buy-commodity wood) ) (defrule (current-age == feudal-age) (gold-amount >= 500) (food-amount <= 100) (commodity-buying-price food <= 100) (can-buy-commodity food) => (chat-local-to-self "Food panic") (buy-commodity food) ) (defrule (current-age == feudal-age) (gold-amount >= 600) (stone-amount <= 100) (commodity-buying-price stone <= 200) (can-buy-commodity stone) => (chat-local-to-self "need stone") (buy-commodity stone) ) (defrule (current-age == feudal-age) (wood-amount >= 500) (or (gold-amount < 100) (food-amount < 100) ) (commodity-selling-price wood >= 50) (can-sell-commodity wood) => (chat-local-to-self "Gold panic; sell wood") (sell-commodity wood) ) (defrule (current-age == feudal-age) (food-amount >= 1000) (or (gold-amount < 100) (wood-amount < 100) ) (can-sell-commodity food) => (chat-local-to-self "excess food") (sell-commodity food) ) (defrule (current-age == feudal-age) (stone-amount >= 1000) (or (gold-amount < 100) (wood-amount < 100) ) (can-sell-commodity stone) => (chat-local-to-self "excess stone") (sell-commodity stone) ) ;*******************CASTLE**************** (defrule (current-age == castle-age) (gold-amount >= 1000) (wood-amount <= 200) (commodity-buying-price wood <= 100) (can-buy-commodity wood) => (chat-local-to-self "Wood panic") (buy-commodity wood) ) (defrule (current-age == castle-age) (gold-amount >= 500) (wood-amount <= 100) (can-buy-commodity wood) => (chat-local-to-self "Wood panic") (buy-commodity wood) ) (defrule (current-age == castle-age) (gold-amount >= 1000) (food-amount <= 200) (commodity-buying-price food <= 100) (can-buy-commodity food) => (chat-local-to-self "Food panic") (buy-commodity food) ) (defrule (current-age == castle-age) (gold-amount >= 500) (food-amount <= 100) (can-buy-commodity food) => (chat-local-to-self "Food panic") (buy-commodity food) ) (defrule (current-age == castle-age) (gold-amount >= 1200) (stone-amount <= 200) (commodity-buying-price stone <= 200) (can-buy-commodity stone) => (chat-local-to-self "need stone") (buy-commodity stone) ) (defrule (current-age == castle-age) (wood-amount >= 1000) (or (gold-amount < 200) (food-amount < 200) ) (commodity-selling-price wood >= 25) (can-sell-commodity wood) => (chat-local-to-self "Gold panic; sell wood") (sell-commodity wood) ) (defrule (current-age == castle-age) (food-amount >= 1200) (or (gold-amount < 200) (wood-amount < 200) ) (can-sell-commodity food) => (chat-local-to-self "excess food") (sell-commodity food) ) (defrule (current-age == castle-age) (stone-amount >= 1000) (or (gold-amount < 200) (wood-amount < 200) ) (can-sell-commodity stone) => (chat-local-to-self "excess stone") (sell-commodity stone) ) ;imperial age (defrule (gold-amount >= 1500) (wood-amount <= 200) (can-buy-commodity wood) => (chat-local-to-self "Wood panic") (buy-commodity wood) ) (defrule (gold-amount >= 1500) (food-amount <= 200) (can-buy-commodity food) => (chat-local-to-self "Food panic") (buy-commodity food) ) (defrule (gold-amount >= 1500) (stone-amount <= 200) (can-buy-commodity stone) => (chat-local-to-self "need stone") (buy-commodity stone) ) (defrule (wood-amount >= 1500) (or (gold-amount < 200) (food-amount < 200) ) (can-sell-commodity wood) => (chat-local-to-self "Gold panic; sell wood") (sell-commodity wood) ) (defrule (food-amount >= 1500) (or (gold-amount < 200) (wood-amount < 200) ) (can-sell-commodity food) => (chat-local-to-self "excess food") (sell-commodity food) ) (defrule (stone-amount >= 1500) (or (or (gold-amount < 200) (wood-amount < 200) ) (food-amount < 200) ) (can-sell-commodity stone) => (chat-local-to-self "excess stone") (sell-commodity stone) ) (defrule ; (goal resource-needed NO) (current-age == dark-age) (civilian-population < 10) (not (strategic-number sn-wood-gatherer-percentage == 10) ) => (set-strategic-number sn-wood-gatherer-percentage 10) (set-strategic-number sn-food-gatherer-percentage 90) (set-strategic-number sn-gold-gatherer-percentage 0) (set-strategic-number sn-stone-gatherer-percentage 0) ) (defrule ; (goal resource-needed WOOD) (current-age == dark-age) (civilian-population < 10) (not (strategic-number sn-wood-gatherer-percentage == 20) ) => (set-strategic-number sn-wood-gatherer-percentage 20) (set-strategic-number sn-food-gatherer-percentage 80) (set-strategic-number sn-gold-gatherer-percentage 0) (set-strategic-number sn-stone-gatherer-percentage 0) ) (defrule ; (goal resource-needed NO) (current-age == dark-age) (civilian-population >= 10) (not (strategic-number sn-wood-gatherer-percentage == 30) ) => (set-strategic-number sn-wood-gatherer-percentage 30) (set-strategic-number sn-food-gatherer-percentage 70) ) (defrule ; (goal resource-needed WOOD) (current-age == dark-age) (civilian-population >= 10) (not (strategic-number sn-wood-gatherer-percentage == 40) ) => (set-strategic-number sn-wood-gatherer-percentage 40) (set-strategic-number sn-food-gatherer-percentage 60) ) (defrule ; (goal resource-needed FOOD) (current-age == dark-age) (civilian-population >= 10) (not (strategic-number sn-wood-gatherer-percentage == 20) ) => (set-strategic-number sn-wood-gatherer-percentage 20) (set-strategic-number sn-food-gatherer-percentage 80) ) (defrule ; (goal resource-needed GOLD) (current-age == dark-age) => (set-strategic-number sn-wood-gatherer-percentage 25) (set-strategic-number sn-food-gatherer-percentage 65) (set-strategic-number sn-gold-gatherer-percentage 10) (disable-self) )