Created
October 26, 2014 21:38
-
-
Save Andygmb/1e3a6d9d444b2dfa8c40 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; The official HD AI | |
; An Artificial Intelligence Script written by Archon and Promiskuitiv | |
; Get in contact with Promiskuitiv by sending a mail to [email protected] | |
; List of taunts it reacts to: | |
; Standard taunts. | |
; 33 - Stop slinging resources. If slinging is requested early and is immediately canceled it may mess up the strategy. | |
; 38 - Sling Resources. Human player only, stops any unit production except for civilian units. | |
; 100 - Forbids the AI to resign. | |
; 101 - Cancels the 100 taunt. | |
; 200 - Enables resource cheats - only works on 'hardest' difficulty. | |
; 222 - Same as 31, but more likely to help (only taunt this if you really need it). | |
; 230 - Tells the AI to go for a monk rush (taunt only works on civs who have good monks). | |
; 231-238 - Chat 230+[enemy player number] to make the AI target this enemy for 10 minutes. | |
; 250 - Chats information about the current strategy. | |
;Reusing obsolete strategic numbers that have no other effect. | |
(defconst sn-current-age 193);tracks our current age | |
(defconst sn-military-level 190); compares our military with enemy | |
(defconst sn-resource-control 191); 0=spend res free, 1=navy, 2=research only; > 2 specific items | |
(defconst sn-infantry-threat 53) | |
(defconst sn-archer-threat 64) | |
(defconst sn-cavalry-threat 65) | |
;Goals | |
(defconst increase-town-size-goal 1); this increases town size when needed, 0 = no increase, 2 = building placed this rule pass, else increase | |
(defconst attack-goal 2) | |
(defconst strategy-goal 3) | |
(defconst unit-goal 4) | |
(defconst train-civ-goal 5);1=train villagers, !=1 no villagers | |
(defconst control-goal 6); 6 = allow to be shot, 7 = shot, also controls if stone for a castle is needed. | |
(defconst anti-cavalry-threat-goal 7) | |
(defconst monk-threat-goal 8) | |
(defconst enemy-goal 9); keep track of what our foe is doing | |
(defconst farm-goal 10);enable/disable farming | |
(defconst under-attack-goal 11); town under attack or just a little harass? | |
(defconst enemy-boats-goal 12) | |
(defconst ffa-game-goal 13) | |
(defconst need-loom-goal 14) | |
(defconst escrow-purpose-goal 15); keeps track on what we use our escrow | |
(defconst spread-military-goal 16); spread military every couple of minutes to prevent villagers stuck | |
(defconst uu-up-goal 17); use escrow to upgrade uu | |
(defconst hostilities-goal 18); set this flag when we're attacked or attacking - avoid rule too long error | |
(defconst ranged-unit-type-goal 19);shows the ranged unit we use | |
(defconst retreat-now-goal 20); use to retreat with UP, condition: 1=always, 2=when attacking, 3=attack conditions false | |
(defconst housing-goal 21); used to build multiple houses with UP | |
(defconst anti-monk-threat-goal 22) | |
(defconst enemy-sighted-goal 23); when enemy activities detected, split the attack groups | |
(defconst attack-status-goal 24); indicates if we stop or regroup the attack | |
(defconst forward-threat-goal 25); enemy tower rush threat | |
(defconst enemy-fortifications-goal 26); delay attacks if enemy has many castles and walled with castle | |
(defconst restart-attack-goal 27); restarts attack in team games if TSA was reduced to place a building | |
(defconst save-wood-goal 28); controls spending wood | |
(defconst meso-enemy-goal 29); enemy has a meso civ; saves elements in a rule | |
(defconst nr-map-goal 30); focus on eco in easily wall-able maps vs humans | |
(defconst tribute-goal 31); ask for resources | |
(defconst patrol-goal 32); resets patrol attacks sent by the direct unit feature | |
(defconst split-rule-goal 33); split rule if we need more than 16 elements | |
(defconst tc-dodging-goal 34); move scout out of TC fire | |
(defconst kill-scouts-goal 35); kill enemy scouts | |
(defconst forward-goal 36); -1 no fwd, 1 fwd, ID of building = building requested | |
(defconst gather-inside-goal 37) | |
(defconst hunting-goal 38); controls hunting | |
(defconst micro-goal 41) | |
(defconst math-goal 42); temporary stored values | |
(defconst math-goal2 43) | |
(defconst math-goal3 44) | |
(defconst math-goal4 45) | |
(defconst position-goal 46); detect if we're pocket (=2) or flank (=1) player; was here before that many goals were used, shared with other AI | |
(defconst raid-goal 47); raiding weak player's eco. | |
(defconst closest-enemy-goal 48); stores player number of nearest enemy | |
(defconst threat-time-goal 49); stores time in miliseconds we were last attacked | |
(defconst threat-player-goal 50); stores player number of the attacker | |
(defconst threat-source-goal 51); unit class of the last enemy attacker | |
(defconst threat-target-goal 52); unit class of the our last attacked unit | |
(defconst winning-player 53); player number of enemy winning by specifal victory condition | |
(defconst victory-type 54); winning type | |
(defconst victory-time 55); time left | |
(defconst retargetenemy 56) | |
(defconst defendchat 57) | |
(defconst dark-build-order-goal 58); 1 = dock first, 2 = skip farms on a map that has more berries | |
(defconst closest-ally-goal 59); stores closes flank if pocket instead | |
(defconst aofe-game-goal 60); set to 1 if forgotten empires expansion is detected | |
(defconst attacking-enemy-goal 61); stores player number of the attacker; shared with Barbarian | |
(defconst reset 62); prov | |
(defconst attackchat 63) | |
(defconst stanceg 64) | |
(defconst request 65) | |
(defconst nomad 66) | |
(defconst landnomad 67) | |
(defconst request2 68) | |
(defconst team-coordination-goal 392); shared with Barbarian and Promi | |
;SN/Goal Values | |
(defconst yes 1) | |
(defconst no 0) | |
(defconst dark 78) | |
(defconst df-transit 79) | |
(defconst feudal 80) | |
(defconst fc-transit 81) | |
(defconst castle 82) | |
(defconst ci-transit 83) | |
(defconst imperial 84) | |
(defconst flush 200) | |
(defconst rush 201) | |
(defconst boom 202) | |
(defconst fast-imp 203) | |
(defconst sling 204) | |
(defconst drush 205); not used | |
(defconst mix 1) | |
(defconst belated-flush-defense 5) | |
(defconst aggressive-rush 6) | |
(defconst shot 7) | |
(defconst uu 8) | |
(defconst navy 4000) | |
(defconst flank 1) | |
(defconst pocket 2) | |
(defconst retreat 1) | |
(defconst groups 2) | |
(defconst tsa 3) | |
;Timers | |
(defconst increase-town-size-timer 1) | |
(defconst reset-town-size-timer 2) | |
(defconst scouting-timer 3) | |
(defconst attack-timer 4) | |
(defconst spread-military-timer 5) | |
(defconst under-attack-timer 7) | |
(defconst civ-explore-timer 8) | |
(defconst lumber-timer 8) | |
(defconst one-minute-timer 9) | |
(defconst tribute-timer 10) | |
(defconst micro-timer 11) | |
(defconst navy-attack-timer 12); don't spam attack or we can't retreat boats from fortifications | |
(defconst help-ally-timer 13); indicated when we sent help to ally | |
(defconst FDrop 14); timer for forcedrop to continuously train villager | |
(defconst retreat-timer 15); timer to avoid looping retreat unit commands | |
(defconst hunting-timer 16) | |
(defconst garrison-timer 17) | |
(defconst disable-defend-groups-timer 18); always enable defending again | |
(defconst monk-micro-timer 19) | |
(defconst misc-micro-timer 20) | |
(defconst train-forward-timer 21) | |
(defconst rally-units-timer 22) | |
(defconst reset-units-timer 23) | |
(defconst attack-chat 24) | |
(defconst stance 25) | |
(defconst thirty 26) | |
(defconst tensec 27) | |
(defconst two-minute-timer 28) | |
(defconst defend-timer 29) | |
(defconst resign-timer 30) | |
(defconst human-coop-timer 31) | |
(defconst tribute-timer2 31) | |
;Unit IDs | |
(defconst male-hunter 122) | |
(defconst female-hunter 216) | |
(defconst male-forager 120) | |
(defconst female-forager 354) | |
(defconst male-shepherd 592) | |
(defconst female-shepherd 590) | |
(defconst female-gold-miner 579) | |
(defconst male-gold-miner 581) | |
(defconst hunter 976) | |
(defconst food-gatherer 978) | |
(defconst ri-herbal-medicine 441) | |
(defconst ri-perfusion 457) | |
(defconst ri-anarchy 16) | |
(defconst ri-spies 408); useless for AIs | |
(defconst ri-treadmill-crane 54) | |
(defconst unpacked-trebuchet 42) | |
(defconst rax-husky-line 759) | |
(defconst ranged-unit-class 900) | |
(defconst building-class 903) | |
(defconst villager-class 904) | |
(defconst infantry-class 906) | |
(defconst cavalry-unit-class 912) | |
(defconst siege-unit-class 913) | |
(defconst monastery-class 918) | |
(defconst mounted-gun-class 923) | |
(defconst cavalry-archer-class 936) | |
(defconst gunpowder-class 944) | |
(defconst scorpion-class 955) | |
(defconst tower-class 952) | |
(defconst warship-class 922) | |
(defconst tree-class 915) | |
(defconst forage-bush 59) | |
(defconst gold-mine 66) | |
(defconst stone-mine 102) | |
(defconst shore-fish 933) | |
(defconst sea-fish 905) | |
(defconst sheep 958) | |
(defconst relic 285) | |
(defconst revealer 112) | |
(defconst flare 274) | |
(defconst tc-arrow 54) | |
(defconst watch-tower-arrow 786) | |
(defconst castle-arrow 746) | |
(defconst castle-arrow-chemistry 747) | |
;User Patch | |
(defconst game-time 0); FactId Constants | |
(defconst population-cap 1) | |
(defconst population-headroom 2) | |
(defconst housing-headroom 3) | |
(defconst idle-farm-count 4) | |
(defconst food-amount 5) | |
(defconst wood-amount 6) | |
(defconst stone-amount 7) | |
(defconst gold-amount 8) | |
(defconst escrow-amount 9) | |
(defconst commodity-buying-price 10) | |
(defconst commodity-selling-price 11) | |
(defconst dropsite-min-distance 12) | |
(defconst soldier-count 13) | |
(defconst attack-soldier-count 14) | |
(defconst defend-soldier-count 15) | |
(defconst warboat-count 16) | |
(defconst attack-warboat-count 17) | |
(defconst defend-warboat-count 18) | |
(defconst current-age 19) | |
(defconst current-score 20) | |
(defconst civilization 21) | |
(defconst player-number 22) | |
(defconst player-in-game 23) | |
(defconst unit-count 24) | |
(defconst unit-type-count 25) | |
(defconst unit-type-count-total 26) | |
(defconst building-count 27) | |
(defconst building-type-count 28) | |
(defconst building-type-count-total 29) | |
(defconst population 30) | |
(defconst military-population 31) | |
(defconst civilian-population 32) | |
(defconst random-number 33) | |
(defconst resource-amount 34) | |
(defconst player-distance 35) | |
(defconst allied-goal 36) | |
(defconst allied-sn 37) | |
(defconst resource-percent 38) | |
(defconst enemy-buildings-in-town 39) | |
(defconst enemy-units-in-town 40) | |
(defconst enemy-villagers-in-town 41) | |
(defconst players-in-game 42) | |
(defconst defender-count 43) | |
(defconst building-type-in-town 44) | |
(defconst unit-type-in-town 45) | |
(defconst villager-type-in-town 46) | |
(defconst gaia-type-count 47) | |
(defconst gaia-type-count-total 48) | |
(defconst cc-gaia-type-count 49) | |
(defconst aggressive 0) | |
(defconst defensive 1) | |
(defconst stand-ground 2) | |
(defconst no-attack 3) | |
(defconst projectile-town-center 0); Define ProjectileType Constants | |
(defconst projectile-castle 1) | |
(defconst projectile-watch-tower 2) | |
(defconst projectile-bombard-tower 3) | |
(defconst projectile-ship 4) | |
(defconst projectile-siege 5) | |
(defconst projectile-fortification 6) | |
(defconst projectile-any 7) | |
(defconst find-attacker 0); Define FindPlayerMethod Constants | |
(defconst find-random 1) | |
(defconst find-closest 2) | |
(defconst find-ordered 3) | |
(defconst research-unavailable 0); Define ResearchState Constants | |
(defconst research-available 1) | |
(defconst research-pending 2) | |
(defconst research-complete 3) | |
(defconst timer-disabled 0); Define TimerState Constants | |
(defconst timer-triggered 1) | |
(defconst timer-running 2) | |
(defconst group-type-land-attack 100);Define GroupType Constants | |
(defconst group-type-land-explore 101) | |
(defconst group-type-land-trade 109) | |
(defconst group-type-water-attack 102) | |
(defconst group-type-water-explore 103) | |
(defconst group-type-water-trade 106) | |
(defconst group-type-transport-ship 104) | |
(defconst group-type-fishing-ship 105) | |
(defconst group-type-forward-builder 107) | |
(defconst group-type-monk 108) | |
(defconst amount-tribute-inefficiency 46) | |
(defconst position-center 0) | |
(defconst position-opposite 1) | |
(defconst position-corner 2) | |
(defconst position-enemy 3) | |
(defconst position-border 4) | |
(defconst position-mirror 5) | |
(defconst position-flank 6) | |
(defconst position-zero 7) | |
(defconst position-map-size 8) | |
(defconst position-self 9) | |
(defconst position-target 10) | |
(defconst position-focus 11) | |
(defconst position-object 12) | |
(defconst position-point 13) | |
(defconst sort-targets 0) | |
(defconst sort-random 1) | |
(defconst sort-distance 2) | |
(defconst sort-hitpoints 3) | |
(defconst sort-range 4) | |
;(defconst find-attacker 0) | |
;(defconst find-random 1) | |
;(defconst find-closest 2) | |
;(defconst find-ordered 3) | |
(defconst ally 0) | |
(defconst neutral 1) | |
(defconst any 2) | |
(defconst enemy 3) | |
(defconst forage-food 16) | |
(defconst sheep-food 958) | |
(defconst boar-food 910) | |
#load-if-defined CIV-TAGS-FOR-EDITOR | |
(defconst ITALIAN-CIV 0) | |
(defconst MAGYAR-CIV 0) | |
(defconst INDIAN-CIV 0) | |
(defconst SLAVIC-CIV 0) | |
(defconst INCAN-CIV 0) | |
#end-if | |
(defconst italian 19) | |
(defconst indian 20) | |
(defconst incan 21) | |
(defconst magyar 22) | |
(defconst slavic 23) | |
(defconst stable-tarkan 886) | |
(defconst stable-elite-tarkan 887) | |
(defconst boyar 876) | |
(defconst elite-boyar 878) | |
(defconst kamayuk 879) | |
(defconst elite-kamayuk 881) | |
(defconst slinger 185) | |
(defconst ri-elite-magyar-huszar 472) | |
(defconst magyar-huszar 869) | |
(defconst elite-magyar-huszar 871) | |
(defconst ri-elite-elephant-archer 481) | |
(defconst elephant-archer 873) | |
(defconst elite-elephant-archer 875) | |
(defconst imperial-camel 897) | |
(defconst ri-elite-genoese-crossbow 468) | |
(defconst genoese-crossbowman 866) | |
(defconst elite-genoese-crossbowman 868) | |
(defconst heavy-eagle-warrior 753) | |
(defconst condottiero 882) | |
(defconst ri-chivalry 493) | |
(defconst ri-inquisition 492) | |
(defconst ri-sipahi 491) | |
(defconst ri-madrasah 490) | |
(defconst ri-ironclad 489) | |
(defconst ri-boiling-oil 488) | |
(defconst ri-nomads 487) | |
(defconst ri-panokseon 486) | |
(defconst ri-yasama 484) | |
(defconst ri-marauders 483) | |
(defconst ri-atlatl 460) | |
(defconst ri-war-wolf 461) | |
(defconst ri-greek-fire 464) | |
(defconst ri-chieftains 463) | |
(defconst ri-stronghold 482) | |
(defconst ri-great-wall 462) | |
(defconst ri-orthodoxy 512) | |
(defconst ri-druzhina 513) | |
(defconst ri-elite-boyar 504) | |
(defconst ri-andean-sling 516) | |
(defconst ri-couriers 517) | |
(defconst ri-elite-kamayuk 509) | |
(defconst ri-sultans 506) | |
(defconst ri-shatagni 507) | |
(defconst ri-imperial-camel 521) | |
(defconst ri-mercenaries 514) | |
(defconst ri-recurve-bow 515) | |
(defconst ri-silk-road 499) | |
(defconst ri-pavise 494) | |
(defconst ri-revetments 525) | |
(defconst ri-eagle-warrior 384) | |
(defconst ri-gillnets 65) | |
(defconst ri-hunting-dogs 526) | |
(defconst ri-obsidian-arrows 485) | |
(defconst siege-tower 885) | |
(defconst upgraded-palisade-wall 119) | |
(defconst sea-tower 785) | |
(defconst sea-wall 788) | |
; Other SNs | |
(defconst sn-food-modifier-percentage 156) | |
(defconst sn-wood-modifier-percentage 157) | |
(defconst sn-stone-modifier-percentage 158) | |
(defconst sn-gold-modifier-percentage 159) | |
;civ specific | |
#load-if-defined AZTEC-CIV | |
(defconst dark-age-villager 28) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 202) | |
(defconst default-unit eagle-warrior) | |
(defconst unique-unit-food 110);minimum food amount | |
(defconst default-flush-unit archer) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged archer) | |
(defconst pocket-unit eagle-warrior) | |
(defconst get-lightcav 0) | |
(defconst scout-unit eagle-warrior-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 1) | |
(defconst sling-time 600) | |
(defconst sling-number 100); > 10 actually never slings | |
(defconst sling-two 0) | |
(defconst blot-size 0) | |
(defconst villager-barracks 3) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 9) | |
(defconst villager-monastery 7) | |
(defconst villager-town-center 15) | |
(defconst villager-castle 12) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 17) | |
(defconst number-barracks 10) | |
(defconst number-stables 5) | |
(defconst number-archery-ranges 7) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 14) | |
(defconst pidm-food 10) | |
(defconst pidm-wood 10) | |
(defconst pidm-gold 75) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 28) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 36) | |
(defconst uu-gold 24) | |
(defconst uu-stone 4) | |
(defconst uu-food2 36) | |
(defconst uu-wood2 30) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 38) | |
(defconst ci-uu-switch-wood 28) | |
(defconst ci-uu-switch-gold 28) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 0) | |
(defconst evaluation-distance 100) | |
(defconst max-food-escrow 1000) | |
(defconst max-gold-escrow 500) | |
#end-if | |
#load-if-defined BRITON-CIV | |
(defconst dark-age-villager 28) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 200) | |
(defconst pocket-strategy 202) | |
(defconst default-unit archer) | |
(defconst unique-unit-food 0) | |
(defconst default-flush-unit archer) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged archer) | |
(defconst pocket-unit my-unique-unit-line) | |
(defconst get-lightcav 0) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 2) | |
(defconst military-level-flush-aggressive 1) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 600) | |
(defconst sling-number 90) | |
(defconst sling-two 1) | |
(defconst blot-size 1) | |
(defconst villager-barracks 3) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 12) | |
(defconst villager-monastery 7) | |
(defconst villager-town-center 8) | |
(defconst villager-castle 3) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 17) | |
(defconst number-barracks 6) | |
(defconst number-stables 0) | |
(defconst number-archery-ranges 9) | |
(defconst tc-boom-monastery 3) | |
(defconst farm-count 14) | |
(defconst pidm-food 0) | |
(defconst pidm-wood 47) | |
(defconst pidm-gold 48) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 26) | |
(defconst pidm-wood2 34) | |
(defconst pidm-gold2 35) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 30) | |
(defconst uu-wood2 36) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 30) | |
(defconst ci-uu-switch-wood 40) | |
(defconst ci-uu-switch-gold 26) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 850) | |
(defconst max-gold-escrow 850) | |
#end-if | |
#load-if-defined BYZANTINE-CIV | |
(defconst dark-age-villager 30) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 201) | |
(defconst default-unit skirmisher) | |
(defconst unique-unit-food 120) | |
(defconst default-flush-unit skirmisher) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged archer) | |
(defconst pocket-unit skirmisher) | |
(defconst get-lightcav 0) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 2) | |
(defconst military-level-flush-aggressive 1) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 270) | |
(defconst sling-number 80) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 9) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 12) | |
(defconst villager-monastery 12) | |
(defconst villager-town-center 15) | |
(defconst villager-castle 3) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 17) | |
(defconst number-barracks 6) | |
(defconst number-stables 5) | |
(defconst number-archery-ranges 7) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 14) | |
(defconst pidm-food 10) | |
(defconst pidm-wood 10) | |
(defconst pidm-gold 75) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 37) | |
(defconst pidm-wood2 32) | |
(defconst pidm-gold2 27) | |
(defconst pidm-stone2 4) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 39) | |
(defconst uu-wood2 39) | |
(defconst uu-gold2 18) | |
(defconst uu-stone2 3) | |
(defconst ci-uu-switch-food 38) | |
(defconst ci-uu-switch-wood 37) | |
(defconst ci-uu-switch-gold 18) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 1600) | |
(defconst max-gold-escrow 800) | |
#end-if | |
#load-if-defined CELTIC-CIV | |
(defconst dark-age-villager 29) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 200) | |
(defconst pocket-strategy 201) | |
(defconst default-unit militiaman-line) | |
(defconst unique-unit-food 115) | |
(defconst default-flush-unit skirmisher) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged 0) | |
(defconst pocket-unit knight) | |
(defconst get-lightcav 0) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 2) | |
(defconst military-level-flush-aggressive 1) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 210) | |
(defconst sling-number 55) | |
(defconst sling-two 1) | |
(defconst blot-size 1) | |
(defconst villager-barracks 3) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 9) | |
(defconst villager-monastery 7) | |
(defconst villager-town-center 8) | |
(defconst villager-castle 5) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 17) | |
(defconst number-barracks 9) | |
(defconst number-stables 3) | |
(defconst number-archery-ranges 4) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 16) | |
(defconst pidm-food 30) | |
(defconst pidm-wood 10) | |
(defconst pidm-gold 55) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 28) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 39) | |
(defconst uu-wood 45) | |
(defconst uu-gold 13) | |
(defconst uu-stone 3) | |
(defconst uu-food2 40) | |
(defconst uu-wood2 28) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 4) | |
(defconst ci-uu-switch-food 38) | |
(defconst ci-uu-switch-wood 28) | |
(defconst ci-uu-switch-gold 28) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 1000) | |
(defconst max-gold-escrow 800) | |
#end-if | |
#load-if-defined CHINESE-CIV | |
(defconst dark-age-villager 29) | |
(defconst villager-wonder-dark 33) | |
(defconst villager-wonder-feudal 35) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 202) | |
(defconst default-unit knight) | |
(defconst unique-unit-food 0) | |
(defconst default-flush-unit scout-cavalry) | |
(defconst no-gold-flush-unit scout-cavalry) | |
(defconst default-ranged archer) | |
(defconst pocket-unit my-unique-unit-line) | |
(defconst get-lightcav 0) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 260) | |
(defconst sling-number 70) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 9) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 16) | |
(defconst villager-monastery 12) | |
(defconst villager-town-center 15) | |
(defconst villager-castle 5) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 17) | |
(defconst number-barracks 6) | |
(defconst number-stables 8) | |
(defconst number-archery-ranges 6) | |
(defconst tc-boom-monastery 3) | |
(defconst farm-count 14) | |
(defconst pidm-food 0) | |
(defconst pidm-wood 47) | |
(defconst pidm-gold 48) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 26) | |
(defconst pidm-wood2 34) | |
(defconst pidm-gold2 35) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 32) | |
(defconst uu-wood2 38) | |
(defconst uu-gold2 24) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 34) | |
(defconst ci-uu-switch-wood 34) | |
(defconst ci-uu-switch-gold 26) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 0) | |
(defconst evaluation-distance 100) | |
(defconst max-food-escrow 760) | |
(defconst max-gold-escrow 760) | |
#end-if | |
#load-if-defined FRANKISH-CIV | |
(defconst dark-age-villager 29) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 201) | |
(defconst default-unit knight) | |
(defconst unique-unit-food 0) | |
(defconst default-flush-unit skirmisher) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged archer) | |
(defconst pocket-unit knight) | |
(defconst get-lightcav 0) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 1) | |
(defconst sling-time 600) | |
(defconst sling-number 100) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 9) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 16) | |
(defconst villager-monastery 12) | |
(defconst villager-town-center 18) | |
(defconst villager-castle 8) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 14) | |
(defconst villager-market 8) | |
(defconst number-barracks 8) | |
(defconst number-stables 10) | |
(defconst number-archery-ranges 4) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 15) | |
(defconst pidm-food 45) | |
(defconst pidm-wood 0) | |
(defconst pidm-gold 50) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 28) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 44) | |
(defconst uu-wood2 26) | |
(defconst uu-gold2 25) | |
(defconst uu-stone2 5) | |
(defconst ci-uu-switch-food 43) | |
(defconst ci-uu-switch-wood 26) | |
(defconst ci-uu-switch-gold 25) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 0) | |
(defconst evaluation-distance 100) | |
(defconst max-food-escrow 1000) | |
(defconst max-gold-escrow 850) | |
#end-if | |
#load-if-defined GOTHIC-CIV | |
(defconst dark-age-villager 30) | |
(defconst villager-wonder-dark 33) | |
(defconst villager-wonder-feudal 35) | |
(defconst default-strategy 200) | |
(defconst pocket-strategy 201) | |
(defconst default-unit militiaman-line) | |
(defconst unique-unit-food 100) | |
(defconst default-flush-unit militiaman-line) | |
(defconst no-gold-flush-unit skirmisher) | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defconst default-ranged archer) | |
#else | |
(defconst default-ranged scorpion) | |
#end-if | |
(defconst pocket-unit knight) | |
(defconst get-lightcav 0) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 1) | |
(defconst sling-time 250) | |
(defconst sling-number 40) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 3) | |
(defconst villager-stable 20) | |
(defconst villager-archery-range 14) | |
(defconst villager-monastery 12) | |
(defconst villager-castle 10) | |
(defconst villager-mining-camp 14) | |
(defconst villager-town-center 18) | |
(defconst villager-siege-workshop 15) | |
(defconst villager-market 9) | |
(defconst number-barracks 14) | |
(defconst number-stables 1) | |
(defconst number-archery-ranges 4) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 14) | |
(defconst pidm-food 52) | |
(defconst pidm-wood 12) | |
(defconst pidm-gold 36) | |
(defconst pidm-stone 0) | |
(defconst pidm-food2 36) | |
(defconst pidm-wood2 23) | |
(defconst pidm-gold2 36) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 51) | |
(defconst uu-wood2 28) | |
(defconst uu-gold2 19) | |
(defconst uu-stone2 2) | |
(defconst ci-uu-switch-food 46) | |
(defconst ci-uu-switch-wood 28) | |
(defconst ci-uu-switch-gold 20) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 1200) | |
(defconst max-gold-escrow 550) | |
#end-if | |
#load-if-defined HUN-CIV | |
(defconst dark-age-villager 29) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 201) | |
(defconst default-unit knight) | |
(defconst unique-unit-food 0) | |
(defconst default-flush-unit scout-cavalry) | |
(defconst no-gold-flush-unit scout-cavalry) | |
(defconst default-ranged cavalry-archer) | |
(defconst pocket-unit knight) | |
(defconst get-lightcav 1) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 1) | |
(defconst sling-time 600) | |
(defconst sling-number 100) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 3) | |
(defconst villager-stable 3) | |
(defconst villager-castle 10) | |
(defconst villager-archery-range 8) | |
(defconst villager-monastery 6) | |
(defconst villager-mining-camp 16) | |
(defconst villager-town-center 15) | |
(defconst villager-siege-workshop 5) | |
(defconst villager-market 12) | |
(defconst number-barracks 9) | |
(defconst number-stables 8) | |
(defconst number-archery-ranges 12) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 14) | |
(defconst pidm-food 0) | |
(defconst pidm-wood 30) | |
(defconst pidm-gold 67) | |
(defconst pidm-stone 3) | |
(defconst pidm-food2 30) | |
(defconst pidm-wood2 32) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 30) | |
(defconst uu-wood2 36) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 38) | |
(defconst ci-uu-switch-wood 28) | |
(defconst ci-uu-switch-gold 28) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 0) | |
(defconst evaluation-distance 100) | |
(defconst max-food-escrow 1000) | |
(defconst max-gold-escrow 500) | |
#end-if | |
#load-if-defined JAPANESE-CIV | |
(defconst dark-age-villager 30) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 200) | |
(defconst pocket-strategy 202) | |
(defconst default-unit archer) | |
(defconst unique-unit-food 110) | |
(defconst default-flush-unit archer) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged archer) | |
(defconst pocket-unit archer) | |
(defconst get-lightcav 0) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 200) | |
(defconst sling-number 55) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 3) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 9) | |
(defconst villager-monastery 7) | |
(defconst villager-town-center 8) | |
(defconst villager-castle 5) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 17) | |
(defconst number-barracks 9) | |
(defconst number-stables 1) | |
(defconst number-archery-ranges 7) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 16) | |
(defconst pidm-food 30) | |
(defconst pidm-wood 10) | |
(defconst pidm-gold 60) | |
(defconst pidm-stone 0) | |
(defconst pidm-food2 38) | |
(defconst pidm-wood2 30) | |
(defconst pidm-gold2 27) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 38) | |
(defconst uu-wood2 28) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 38) | |
(defconst ci-uu-switch-wood 28) | |
(defconst ci-uu-switch-gold 28) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 950) | |
(defconst max-gold-escrow 875) | |
#end-if | |
#load-if-defined KOREAN-CIV | |
(defconst dark-age-villager 29) | |
(defconst villager-wonder-dark 33) | |
(defconst villager-wonder-feudal 35) | |
(defconst default-strategy 200) | |
(defconst pocket-strategy 202) | |
(defconst default-unit my-unique-unit-line) | |
(defconst unique-unit-food 0) | |
(defconst default-flush-unit archer) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged archer) | |
(defconst pocket-unit my-unique-unit-line) | |
(defconst get-lightcav 0) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 180) | |
(defconst sling-number 20) | |
(defconst sling-two 1) | |
(defconst blot-size 1) | |
(defconst villager-barracks 3) | |
(defconst villager-stable 16) | |
(defconst villager-archery-range 13) | |
(defconst villager-monastery 7) | |
(defconst villager-town-center 8) | |
(defconst villager-castle 4) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 8) | |
(defconst villager-market 17) | |
(defconst number-barracks 6) | |
(defconst number-stables 1) | |
(defconst number-archery-ranges 7) | |
(defconst tc-boom-monastery 3) | |
(defconst farm-count 14) | |
(defconst pidm-food 0) | |
(defconst pidm-wood 58) | |
(defconst pidm-gold 37) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 26) | |
(defconst pidm-wood2 39) | |
(defconst pidm-gold2 30) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 48) | |
(defconst uu-gold 12) | |
(defconst uu-stone 4) | |
(defconst uu-food2 25) | |
(defconst uu-wood2 44) | |
(defconst uu-gold2 25) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 28) | |
(defconst ci-uu-switch-wood 40) | |
(defconst ci-uu-switch-gold 26) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 0) | |
(defconst max-gold-escrow 800) | |
#end-if | |
#load-if-defined MAYAN-CIV | |
(defconst dark-age-villager 28) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 202) | |
(defconst default-unit archer) | |
(defconst unique-unit-food 0) | |
(defconst default-flush-unit archer) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged archer) | |
(defconst pocket-unit my-unique-unit-line) | |
(defconst get-lightcav 0) | |
(defconst scout-unit eagle-warrior-line) | |
(defconst military-level-flush 2) | |
(defconst military-level-flush-aggressive 1) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 600) | |
(defconst sling-number 100) | |
(defconst sling-two 0) | |
(defconst blot-size 0) | |
(defconst villager-barracks 3) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 14) | |
(defconst villager-monastery 15) | |
(defconst villager-town-center 15) | |
(defconst villager-castle 4) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 12) | |
(defconst villager-market 17) | |
(defconst number-barracks 7) | |
(defconst number-stables 0) | |
(defconst number-archery-ranges 7) | |
(defconst tc-boom-monastery 3) | |
(defconst farm-count 14) | |
(defconst pidm-food 0) | |
(defconst pidm-wood 47) | |
(defconst pidm-gold 48) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 26) | |
(defconst pidm-wood2 34) | |
(defconst pidm-gold2 35) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 33) | |
(defconst uu-wood2 39) | |
(defconst uu-gold2 23) | |
(defconst uu-stone2 4) | |
(defconst ci-uu-switch-food 28) | |
(defconst ci-uu-switch-wood 38) | |
(defconst ci-uu-switch-gold 28) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 0) | |
(defconst evaluation-distance 100) | |
(defconst max-food-escrow 500) | |
(defconst max-gold-escrow 0) | |
#end-if | |
#load-if-defined MONGOL-CIV | |
(defconst dark-age-villager 28) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 200) | |
(defconst pocket-strategy 202) | |
(defconst default-unit knight) | |
(defconst default-flush-unit scout-cavalry) | |
(defconst no-gold-flush-unit scout-cavalry) | |
(defconst unique-unit-food 0) | |
(defconst default-ranged cavalry-archer) | |
(defconst pocket-unit my-unique-unit-line) | |
(defconst get-lightcav 1) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 230) | |
(defconst sling-number 50) | |
(defconst sling-two 0) | |
(defconst blot-size 0) | |
(defconst villager-barracks 14) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 14) | |
(defconst villager-monastery 7) | |
(defconst villager-town-center 8) | |
(defconst villager-castle 3) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 8) | |
(defconst villager-market 17) | |
(defconst number-barracks 6) | |
(defconst number-stables 5) | |
(defconst number-archery-ranges 7) | |
(defconst tc-boom-monastery 3) | |
(defconst farm-count 14) | |
(defconst pidm-food 0) | |
(defconst pidm-wood 30) | |
(defconst pidm-gold 65) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 26) | |
(defconst pidm-wood2 34) | |
(defconst pidm-gold2 35) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 30) | |
(defconst uu-wood2 36) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 35) | |
(defconst ci-uu-switch-wood 33) | |
(defconst ci-uu-switch-gold 26) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 0) | |
(defconst evaluation-distance 100) | |
(defconst max-food-escrow 1100) | |
(defconst max-gold-escrow 675) | |
#end-if | |
#load-if-defined PERSIAN-CIV | |
(defconst dark-age-villager 30) | |
(defconst villager-wonder-dark 33) | |
(defconst villager-wonder-feudal 35) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 201) | |
(defconst default-unit knight) | |
(defconst default-flush-unit scout-cavalry) | |
(defconst no-gold-flush-unit scout-cavalry) | |
(defconst unique-unit-food 0) | |
(defconst default-ranged archer) | |
(defconst pocket-unit knight) | |
(defconst get-lightcav 1) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 1) | |
(defconst sling-time 240) | |
(defconst sling-number 60) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 7) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 16) | |
(defconst villager-monastery 12) | |
(defconst villager-town-center 18) | |
(defconst villager-castle 5) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 7) | |
(defconst villager-market 17) | |
(defconst number-barracks 4) | |
(defconst number-stables 6) | |
(defconst number-archery-ranges 7) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 14) | |
(defconst pidm-food 37) | |
(defconst pidm-wood 0) | |
(defconst pidm-gold 58) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 28) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 43) | |
(defconst uu-wood2 24) | |
(defconst uu-gold2 29) | |
(defconst uu-stone2 4) | |
(defconst ci-uu-switch-food 40) | |
(defconst ci-uu-switch-wood 28) | |
(defconst ci-uu-switch-gold 20) | |
(defconst ci-uu-switch-stone 12) | |
(defconst evaluation-hitpoints 0) | |
(defconst evaluation-distance 100) | |
(defconst max-food-escrow 1600) | |
(defconst max-gold-escrow 1200) | |
#end-if | |
#load-if-defined SARACEN-CIV | |
(defconst dark-age-villager 30) | |
(defconst villager-wonder-dark 33) | |
(defconst villager-wonder-feudal 35) | |
(defconst default-strategy 200) | |
(defconst pocket-strategy 201) | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defconst default-unit knight) | |
#else | |
(defconst default-unit my-unique-unit-line) | |
#end-if | |
(defconst unique-unit-food 135) | |
(defconst default-flush-unit scout-cavalry) | |
(defconst no-gold-flush-unit scout-cavalry) | |
(defconst default-ranged archer) | |
(defconst pocket-unit archer) | |
(defconst get-lightcav 1) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 1) | |
(defconst sling-time 190) | |
(defconst sling-number 25) | |
(defconst sling-two 1) | |
(defconst blot-size 1) | |
(defconst villager-barracks 9) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 9) | |
(defconst villager-monastery 15) | |
(defconst villager-town-center 18) | |
(defconst villager-castle 9) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 9) | |
(defconst number-barracks 6) | |
(defconst number-stables 9) | |
(defconst number-archery-ranges 8) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 14) | |
(defconst pidm-food 10) | |
(defconst pidm-wood 10) | |
(defconst pidm-gold 75) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 28) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 30) | |
(defconst uu-wood2 36) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 33) | |
(defconst ci-uu-switch-wood 33) | |
(defconst ci-uu-switch-gold 28) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 600) | |
(defconst max-gold-escrow 500) | |
#end-if | |
#load-if-defined SPANISH-CIV | |
(defconst dark-age-villager 30) | |
(defconst villager-wonder-dark 33) | |
(defconst villager-wonder-feudal 35) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 201) | |
(defconst default-unit knight) | |
(defconst unique-unit-food 110) | |
(defconst default-flush-unit skirmisher) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged cavalry-archer) | |
(defconst pocket-unit knight) | |
(defconst get-lightcav 1) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 600) | |
(defconst sling-number 100) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 14) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 16) | |
(defconst villager-monastery 12) | |
(defconst villager-town-center 18) | |
(defconst villager-castle 5) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 17) | |
(defconst number-barracks 8) | |
(defconst number-stables 6) | |
(defconst number-archery-ranges 4) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 14) | |
(defconst pidm-food 45) | |
(defconst pidm-wood 0) | |
(defconst pidm-gold 50) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 28) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 42) | |
(defconst uu-wood2 24) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 42) | |
(defconst ci-uu-switch-wood 24) | |
(defconst ci-uu-switch-gold 28) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 0) | |
(defconst evaluation-distance 100) | |
(defconst max-food-escrow 1200) | |
(defconst max-gold-escrow 600) | |
#end-if | |
#load-if-defined TEUTONIC-CIV | |
(defconst dark-age-villager 29) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 201) | |
(defconst default-unit knight) | |
(defconst unique-unit-food 0) | |
(defconst default-flush-unit skirmisher) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged archer) | |
(defconst pocket-unit knight) | |
(defconst get-lightcav 0) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 600) | |
(defconst sling-number 100) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 14) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 16) | |
(defconst villager-monastery 12) | |
(defconst villager-town-center 18) | |
(defconst villager-castle 5) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 7) | |
(defconst villager-market 17) | |
(defconst number-barracks 8) | |
(defconst number-stables 6) | |
(defconst number-archery-ranges 4) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 16) | |
(defconst pidm-food 45) | |
(defconst pidm-wood 0) | |
(defconst pidm-gold 50) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 28) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 36) | |
(defconst uu-gold 24) | |
(defconst uu-stone 4) | |
(defconst uu-food2 42) | |
(defconst uu-wood2 24) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 42) | |
(defconst ci-uu-switch-wood 24) | |
(defconst ci-uu-switch-gold 28) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 0) | |
(defconst evaluation-distance 100) | |
(defconst max-food-escrow 1200) | |
(defconst max-gold-escrow 600) | |
(defconst farm-wood 40) | |
#else | |
(defconst farm-wood 60) | |
#end-if | |
#load-if-defined TURKISH-CIV | |
(defconst dark-age-villager 30) | |
(defconst villager-wonder-dark 33) | |
(defconst villager-wonder-feudal 35) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 201) | |
(defconst default-unit knight) | |
(defconst unique-unit-food 110) | |
(defconst default-flush-unit scout-cavalry) | |
(defconst no-gold-flush-unit scout-cavalry) | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defconst default-ranged archer) | |
#else | |
(defconst default-ranged cavalry-archer) | |
#end-if | |
(defconst pocket-unit knight) | |
(defconst get-lightcav 1) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 1) | |
(defconst sling-time 220) | |
(defconst sling-number 35) | |
(defconst sling-two 1) | |
(defconst blot-size 1) | |
(defconst villager-barracks 14) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 3) | |
(defconst villager-monastery 7) | |
(defconst villager-town-center 8) | |
(defconst villager-castle 5) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 17) | |
(defconst number-barracks 6) | |
(defconst number-stables 7) | |
(defconst number-archery-ranges 4) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 14) | |
(defconst pidm-food 45) | |
(defconst pidm-wood 0) | |
(defconst pidm-gold 50) | |
(defconst pidm-stone 5) | |
(defconst pidm-food2 42) | |
(defconst pidm-wood2 20) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 40) | |
(defconst uu-wood2 26) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 42) | |
(defconst ci-uu-switch-wood 24) | |
(defconst ci-uu-switch-gold 28) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 0) | |
(defconst evaluation-distance 100) | |
(defconst max-food-escrow 850) | |
(defconst max-gold-escrow 750) | |
#end-if | |
#load-if-defined VIKING-CIV | |
(defconst dark-age-villager 30) | |
(defconst villager-wonder-dark 33) | |
(defconst villager-wonder-feudal 35) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 202) | |
(defconst default-unit militiaman-line) | |
(defconst unique-unit-food 115) | |
(defconst default-flush-unit archer) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged archer) | |
(defconst pocket-unit archer) | |
(defconst get-lightcav 0) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 1) | |
(defconst sling-time 600) | |
(defconst sling-number 95) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 3) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 9) | |
(defconst villager-monastery 9) | |
(defconst villager-town-center 7) | |
(defconst villager-castle 5) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 17) | |
(defconst number-barracks 9) | |
(defconst number-stables 1) | |
(defconst number-archery-ranges 7) | |
(defconst tc-boom-monastery 3) | |
(defconst farm-count 14) | |
(defconst pidm-food 30) | |
(defconst pidm-wood 10) | |
(defconst pidm-gold 60) | |
(defconst pidm-stone 0) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 28) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 38) | |
(defconst uu-wood2 28) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 46) | |
(defconst ci-uu-switch-wood 26) | |
(defconst ci-uu-switch-gold 22) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 1300) | |
(defconst max-gold-escrow 550) | |
#end-if | |
#load-if-defined INCAN-CIV | |
(defconst dark-age-villager 29) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 200) | |
(defconst pocket-strategy 202) | |
(defconst default-unit archer) | |
(defconst unique-unit-food 110) | |
(defconst default-flush-unit archer) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged archer) | |
(defconst pocket-unit eagle-warrior) | |
(defconst get-lightcav 0) | |
(defconst scout-unit eagle-warrior-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 600) | |
(defconst sling-number 100) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 3) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 9) | |
(defconst villager-monastery 7) | |
(defconst villager-town-center 16) | |
(defconst villager-castle 5) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 17) | |
(defconst number-barracks 9) | |
(defconst number-stables 1) | |
(defconst number-archery-ranges 7) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 14) | |
(defconst pidm-food 30) | |
(defconst pidm-wood 10) | |
(defconst pidm-gold 60) | |
(defconst pidm-stone 0) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 28) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 36) | |
(defconst uu-gold 24) | |
(defconst uu-stone 4) | |
(defconst uu-food2 41) | |
(defconst uu-wood2 27) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 4) | |
(defconst ci-uu-switch-food 36) | |
(defconst ci-uu-switch-wood 32) | |
(defconst ci-uu-switch-gold 26) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 1300) | |
(defconst max-gold-escrow 550) | |
#end-if | |
#load-if-defined INDIAN-CIV | |
(defconst dark-age-villager 30) | |
(defconst villager-wonder-dark 33) | |
(defconst villager-wonder-feudal 35) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 201) | |
(defconst default-unit skirmisher) | |
(defconst unique-unit-food 160) | |
(defconst default-flush-unit skirmisher) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged archer) | |
(defconst pocket-unit knight) | |
(defconst get-lightcav 1) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 1) | |
(defconst sling-time 195) | |
(defconst sling-number 60) | |
(defconst sling-two 1) | |
(defconst blot-size 1) | |
(defconst villager-barracks 9) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 9) | |
(defconst villager-monastery 7) | |
(defconst villager-town-center 18) | |
(defconst villager-castle 5) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 17) | |
(defconst number-barracks 6) | |
(defconst number-stables 9) | |
(defconst number-archery-ranges 7) | |
(defconst tc-boom-monastery 3) | |
(defconst farm-count 14) | |
(defconst pidm-food 30) | |
(defconst pidm-wood 10) | |
(defconst pidm-gold 60) | |
(defconst pidm-stone 0) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 28) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 38) | |
(defconst uu-wood2 28) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 42) | |
(defconst ci-uu-switch-wood 24) | |
(defconst ci-uu-switch-gold 28) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 1300) | |
(defconst max-gold-escrow 550) | |
#end-if | |
#load-if-defined ITALIAN-CIV | |
(defconst dark-age-villager 30) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 201) | |
(defconst default-unit archer) | |
(defconst unique-unit-food 115) | |
(defconst default-flush-unit archer) | |
(defconst no-gold-flush-unit skirmisher) | |
(defconst default-ranged archer) | |
(defconst pocket-unit knight) | |
(defconst get-lightcav 0) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 600) | |
(defconst sling-number 100) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 12) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 9) | |
(defconst villager-monastery 7) | |
(defconst villager-town-center 18) | |
(defconst villager-castle 3) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 16) | |
(defconst villager-market 17) | |
(defconst number-barracks 9) | |
(defconst number-stables 1) | |
(defconst number-archery-ranges 7) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 14) | |
(defconst pidm-food 30) | |
(defconst pidm-wood 10) | |
(defconst pidm-gold 60) | |
(defconst pidm-stone 0) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 28) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 44) | |
(defconst uu-gold 16) | |
(defconst uu-stone 4) | |
(defconst uu-food2 38) | |
(defconst uu-wood2 28) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 38) | |
(defconst ci-uu-switch-wood 28) | |
(defconst ci-uu-switch-gold 28) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 1300) | |
(defconst max-gold-escrow 550) | |
#end-if | |
#load-if-defined MAGYAR-CIV | |
(defconst dark-age-villager 30) | |
(defconst villager-wonder-dark 33) | |
(defconst villager-wonder-feudal 35) | |
(defconst default-strategy 200) | |
(defconst pocket-strategy 201) | |
(defconst default-unit knight) | |
(defconst unique-unit-food 130) | |
(defconst default-flush-unit scout-cavalry) | |
(defconst no-gold-flush-unit scout-cavalry) | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defconst default-ranged archer) | |
#else | |
(defconst default-ranged cavalry-archer) | |
#end-if | |
(defconst pocket-unit knight) | |
(defconst get-lightcav 0); uu instead | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 600) | |
(defconst sling-number 100) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 7) | |
(defconst villager-stable 3) | |
(defconst villager-archery-range 16) | |
(defconst villager-monastery 12) | |
(defconst villager-town-center 18) | |
(defconst villager-castle 12) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 14) | |
(defconst villager-market 17) | |
(defconst number-barracks 8) | |
(defconst number-stables 6) | |
(defconst number-archery-ranges 4) | |
(defconst tc-boom-monastery 3) | |
(defconst farm-count 14) | |
(defconst pidm-food 30) | |
(defconst pidm-wood 10) | |
(defconst pidm-gold 60) | |
(defconst pidm-stone 0) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 28) | |
(defconst pidm-gold2 33) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 36) | |
(defconst uu-gold 24) | |
(defconst uu-stone 4) | |
(defconst uu-food2 42) | |
(defconst uu-wood2 24) | |
(defconst uu-gold2 28) | |
(defconst uu-stone2 6) | |
(defconst ci-uu-switch-food 32) | |
(defconst ci-uu-switch-wood 36) | |
(defconst ci-uu-switch-gold 26) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 1300) | |
(defconst max-gold-escrow 550) | |
#end-if | |
#load-if-defined SLAVIC-CIV | |
(defconst dark-age-villager 29) | |
(defconst villager-wonder-dark 32) | |
(defconst villager-wonder-feudal 34) | |
(defconst default-strategy 201) | |
(defconst pocket-strategy 202) | |
(defconst default-unit knight) | |
(defconst unique-unit-food 115) | |
(defconst default-flush-unit skirmisher) | |
(defconst no-gold-flush-unit skirmisher) | |
#load-if-not-defined DEATH-MATCH | |
(defconst default-ranged monk) | |
#else | |
(defconst default-ranged 0) | |
#end-if | |
(defconst pocket-unit scorpion) | |
(defconst get-lightcav 1) | |
(defconst scout-unit scout-cavalry-line) | |
(defconst military-level-flush 1) | |
(defconst military-level-flush-aggressive 0) | |
(defconst allow-forward-castle 0) | |
(defconst sling-time 600) | |
(defconst sling-number 100) | |
(defconst sling-two 0) | |
(defconst blot-size 1) | |
(defconst villager-barracks 2) | |
(defconst villager-stable 16) | |
(defconst villager-archery-range 16) | |
(defconst villager-monastery 6) | |
(defconst villager-town-center 16) | |
(defconst villager-castle 4) | |
(defconst villager-mining-camp 14) | |
(defconst villager-siege-workshop 6) | |
(defconst villager-market 17) | |
(defconst number-barracks 4) | |
(defconst number-stables 4) | |
(defconst number-archery-ranges 4) | |
(defconst tc-boom-monastery 2) | |
(defconst farm-count 14) | |
(defconst pidm-food 30) | |
(defconst pidm-wood 10) | |
(defconst pidm-gold 60) | |
(defconst pidm-stone 0) | |
(defconst pidm-food2 34) | |
(defconst pidm-wood2 24) | |
(defconst pidm-gold2 37) | |
(defconst pidm-stone2 5) | |
(defconst uu-food 36) | |
(defconst uu-wood 36) | |
(defconst uu-gold 24) | |
(defconst uu-stone 4) | |
(defconst uu-food2 36) | |
(defconst uu-wood2 31) | |
(defconst uu-gold2 30) | |
(defconst uu-stone2 3) | |
(defconst ci-uu-switch-food 42) | |
(defconst ci-uu-switch-wood 24) | |
(defconst ci-uu-switch-gold 28) | |
(defconst ci-uu-switch-stone 6) | |
(defconst evaluation-hitpoints 100) | |
(defconst evaluation-distance 0) | |
(defconst max-food-escrow 1300) | |
(defconst max-gold-escrow 550) | |
#end-if | |
#load-if-defined BYZANTINE-CIV | |
(defconst imp-food 667) | |
(defconst imp-gold 536) | |
(defconst imp-f2 517) | |
(defconst imp-g2 400) | |
#else | |
#load-if-defined ITALIAN-CIV | |
(defconst imp-food 900) | |
(defconst imp-gold 720) | |
(defconst imp-f2 730) | |
(defconst imp-g2 600) | |
#else | |
(defconst imp-food 1000) | |
(defconst imp-gold 800) | |
(defconst imp-f2 800) | |
(defconst imp-g2 650) | |
#end-if | |
#end-if | |
#load-if-defined POST-IMPERIAL-AGE-START | |
(defconst pop-house 20) | |
#else | |
(defconst pop-house 50) | |
#end-if | |
#load-if-defined DEATH-MATCH | |
(defconst housing-headroom1 40) | |
(defconst housing-headroom2 40) | |
(defconst camp-distance 45) | |
(defconst food-distance 0) | |
(defconst wood-distance -1) | |
#load-if-defined POST-IMPERIAL-AGE-START | |
(defconst market-time 420) | |
#else | |
(defconst market-time 900) | |
#end-if | |
(defconst number-markets 4) | |
(defconst number-blacksmiths 2) | |
(defconst mill-distance 15) | |
(defconst hunt-distance 0) | |
(defconst spread-interval 40) | |
(defconst home-exploration-time 30); deathmatch | |
(defconst special-attack-type2 town-center) | |
#else | |
(defconst housing-headroom1 3) | |
(defconst housing-headroom2 25) | |
(defconst camp-distance 15) | |
(defconst food-distance 25) | |
(defconst wood-distance 0) | |
(defconst market-time 2700) | |
(defconst number-blacksmiths 1) | |
(defconst number-markets 3) | |
#load-if-not-defined SCANDANAVIA-MAP | |
(defconst mill-distance 15) | |
(defconst hunt-distance 0) | |
#else | |
(defconst mill-distance 29) | |
(defconst hunt-distance 32) | |
#end-if | |
(defconst spread-interval 180) | |
#load-if-not-defined WONDER-RACE | |
(defconst home-exploration-time 420) | |
#else | |
(defconst home-exploration-time 32768) | |
#end-if | |
(defconst special-attack-type2 lumber-camp) | |
#end-if | |
#load-if-defined NOMAD-MAP | |
(defconst wood-distance2 -1) | |
#else | |
(defconst wood-distance2 30) | |
#end-if | |
#load-if-defined SALT-MARSH-MAP | |
(defconst dock-placement 1) | |
#else | |
(defconst dock-placement 0) | |
#end-if | |
#load-if-defined YUCATAN-MAP | |
(defconst max-warships 20) | |
#end-if | |
#load-if-defined HIGHLAND-MAP | |
(defconst max-warships 20) | |
#end-if | |
#load-if-not-defined HIGHLAND-MAP | |
#load-if-not-defined YUCATAN-MAP | |
(defconst max-warships 35) | |
#end-if | |
#end-if | |
#load-if-defined ARENA-MAP | |
(defconst camp-distance-tc 15) | |
#else | |
(defconst camp-distance-tc 22) | |
#end-if | |
#load-if-defined REGICIDE | |
#load-if-defined FORTRESS-MAP | |
(defconst lumber-delay 40) | |
#else | |
(defconst lumber-delay 180) | |
#end-if | |
#else | |
(defconst lumber-delay 180) | |
#end-if | |
#load-if-defined TINY-MAP | |
(defconst tsa-increment 6) | |
(defconst shorefishreq 50) | |
(defconst shorefishreq2 25) | |
(defconst deepfishreq 6) | |
(defconst deepfishreq2 3) | |
(defconst heavy-wood 7000) | |
(defconst max-trade-cart 22) | |
(defconst trade-distance 54) | |
#end-if | |
#load-if-defined SMALL-MAP | |
(defconst tsa-increment 8) | |
(defconst shorefishreq 100) | |
(defconst shorefishreq2 50) | |
(defconst deepfishreq 8) | |
(defconst deepfishreq2 4) | |
(defconst heavy-wood 8000) | |
(defconst max-trade-cart 28) | |
(defconst trade-distance 72) | |
#end-if | |
#load-if-defined MEDIUM-MAP | |
(defconst tsa-increment 10) | |
(defconst shorefishreq 150) | |
(defconst shorefishreq2 75) | |
(defconst deepfishreq 10) | |
(defconst deepfishreq2 5) | |
(defconst heavy-wood 10000) | |
(defconst max-trade-cart 35) | |
(defconst trade-distance 90) | |
#end-if | |
#load-if-defined NORMAL-MAP | |
(defconst tsa-increment 12) | |
(defconst shorefishreq 200) | |
(defconst shorefishreq2 100) | |
(defconst deepfishreq 12) | |
(defconst deepfishreq2 6) | |
(defconst heavy-wood 14000) | |
(defconst max-trade-cart 40) | |
(defconst trade-distance 120) | |
#end-if | |
#load-if-defined LARGE-MAP | |
(defconst tsa-increment 15) | |
(defconst shorefishreq 250) | |
(defconst shorefishreq2 125) | |
(defconst deepfishreq 14) | |
(defconst deepfishreq2 7) | |
(defconst heavy-wood 18000) | |
(defconst max-trade-cart 45) | |
(defconst trade-distance 150) | |
#end-if | |
#load-if-defined GIANT-MAP | |
(defconst tsa-increment 18) | |
(defconst shorefishreq 300) | |
(defconst shorefishreq2 150) | |
(defconst deepfishreq 16) | |
(defconst deepfishreq2 8) | |
(defconst heavy-wood 22000) | |
(defconst max-trade-cart 55) | |
(defconst trade-distance 200) | |
#end-if | |
#load-if-defined LUDIKRIS-MAP | |
(defconst tsa-increment 20) | |
(defconst shorefishreq 350) | |
(defconst shorefishreq2 175) | |
(defconst deepfishreq 18) | |
(defconst deepfishreq2 9) | |
(defconst heavy-wood 26000) | |
(defconst max-trade-cart 75) | |
(defconst trade-distance 400) | |
#end-if | |
#load-if-defined HIGHLAND-MAP | |
(defconst water-mixed 1000) | |
(defconst water-islands 1001) | |
#else | |
#load-if-defined TINY-MAP | |
(defconst water-mixed 1000) | |
(defconst water-islands 1001) | |
#end-if | |
#load-if-defined SMALL-MAP | |
(defconst water-mixed 2000) | |
(defconst water-islands 2001) | |
#end-if | |
#load-if-defined MEDIUM-MAP | |
(defconst water-mixed 4000) | |
(defconst water-islands 4001) | |
#end-if | |
#load-if-defined NORMAL-MAP | |
(defconst water-mixed 4000) | |
(defconst water-islands 4001) | |
#end-if | |
#load-if-defined LARGE-MAP | |
(defconst water-mixed 4000) | |
(defconst water-islands 4001) | |
#end-if | |
#load-if-defined GIANT-MAP | |
(defconst water-mixed 4000) | |
(defconst water-islands 4001) | |
#end-if | |
#load-if-defined LUDIKRIS-MAP | |
(defconst water-mixed 4000) | |
(defconst water-islands 4001) | |
#end-if | |
#end-if | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst wood-distance-farm 15) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst wood-distance-farm 12) | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst wood-distance-farm 8) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst wood-distance-farm 7) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst wood-distance-farm 6) | |
#end-if | |
#load-if-not-defined TURBO-RANDOM-MAP | |
#load-if-not-defined POPULATION-CAP-25 | |
(defconst number-rams 4) | |
(defconst number-garrison-units 4) | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst villager-feudal 10) | |
(defconst villager-flush 10) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst villager-feudal 12) | |
(defconst villager-flush 11) | |
#end-if | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
#load-if-defined LOW-RESOURCES-START | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst villager-flush 27) | |
(defconst villager-feudal 29) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst villager-flush 25) | |
(defconst villager-feudal 29) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst villager-flush 24) | |
(defconst villager-feudal 28) | |
#end-if | |
#end-if | |
#load-if-defined MEDIUM-RESOURCES-START | |
(defconst villager-flush 20) | |
(defconst villager-feudal 24) | |
#end-if | |
#load-if-defined HIGH-RESOURCES-START | |
(defconst villager-flush 15) | |
(defconst villager-feudal 16) | |
#end-if | |
#end-if ;NOT EASY | |
#end-if ;NOT EASIEST | |
#else | |
(defconst number-rams 3) | |
(defconst number-garrison-units 1) | |
(defconst villager-feudal 24) | |
(defconst villager-flush 24) | |
#end-if ; = POP25 | |
#else ; = TURBO | |
#load-if-not-defined POPULATION-CAP-25 | |
(defconst number-rams 4) | |
(defconst number-garrison-units 4) | |
#else | |
(defconst number-rams 3) | |
(defconst number-garrison-units 1) | |
#end-if | |
(defconst villager-flush 15) | |
(defconst villager-feudal 16) | |
#end-if | |
#load-if-defined GOLD-RUSH-MAP | |
#load-if-defined TINY-MAP | |
(defconst castle-age-camp-distance 48); high camp distance to reach center gold | |
#end-if | |
#load-if-defined SMALL-MAP | |
(defconst castle-age-camp-distance 48) | |
#end-if | |
#load-if-defined MEDIUM-MAP | |
(defconst castle-age-camp-distance 64) | |
#end-if | |
#load-if-defined NORMAL-MAP | |
(defconst castle-age-camp-distance 90) | |
#end-if | |
#load-if-defined LARGE-MAP | |
(defconst castle-age-camp-distance 124) | |
#end-if | |
#load-if-defined GIANT-MAP | |
(defconst castle-age-camp-distance 124) | |
#end-if | |
#load-if-defined LUDIKRIS-MAP | |
(defconst castle-age-camp-distance 240) | |
#end-if | |
#else | |
(defconst castle-age-camp-distance 35) | |
#end-if ; not gold-rush-map | |
(defconst scorpion-gold-min 170) | |
(defconst villager-coinage 60) | |
(defconst safe-town 45) | |
#load-if-defined POPULATION-CAP-25 | |
(defconst max-fleet 20) | |
(defconst twenty-five-percent-pop 6) | |
(defconst thirty-percent-pop 7) | |
(defconst fourty-percent-pop 10) | |
(defconst sixty-percent-pop 15) | |
(defconst seventy-five-percent-pop 19) | |
(defconst eighty-five-percent-pop 21) | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst max-civ 4) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst max-civ 6) | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst max-civ 8) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst max-civ 10) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst max-civ 12) | |
#end-if | |
(defconst max-civ-pop 20) | |
(defconst del-civ-pop 24) | |
(defconst max-pop 25) | |
(defconst tc-level-one 1) | |
(defconst tc-level-two 1) | |
(defconst tc-level-three 1) | |
(defconst tc-level-four 1) | |
(defconst tc-level-five 1) | |
(defconst low-min-number-upgrade 1) | |
(defconst mid-min-number-upgrade 2) | |
(defconst high-min-number-upgrade 3) | |
(defconst max-trade-pop 0) | |
#end-if | |
#load-if-defined POPULATION-CAP-50 | |
(defconst max-fleet 30) | |
(defconst twenty-five-percent-pop 13) | |
(defconst thirty-percent-pop 15) | |
(defconst fourty-percent-pop 20) | |
(defconst sixty-percent-pop 30) | |
(defconst seventy-five-percent-pop 38) | |
(defconst eighty-five-percent-pop 42) | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst max-civ 4) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst max-civ 12) | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst max-civ 18) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst max-civ 24) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst max-civ 28) | |
#end-if | |
(defconst max-civ-pop 45) | |
(defconst del-civ-pop 48) | |
(defconst max-pop 50) | |
(defconst tc-level-one 1) | |
(defconst tc-level-two 1) | |
(defconst tc-level-three 1) | |
(defconst tc-level-four 2) | |
(defconst tc-level-five 2) | |
(defconst low-min-number-upgrade 1) | |
(defconst mid-min-number-upgrade 3) | |
(defconst high-min-number-upgrade 5) | |
(defconst max-trade-pop 0) | |
#end-if | |
#load-if-defined POPULATION-CAP-75 | |
(defconst max-fleet 40) | |
(defconst twenty-five-percent-pop 19) | |
(defconst thirty-percent-pop 22) | |
(defconst fourty-percent-pop 30) | |
(defconst sixty-percent-pop 45) | |
(defconst seventy-five-percent-pop 57) | |
(defconst eighty-five-percent-pop 64) | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst max-civ 5) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst max-civ 12) | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst max-civ 22) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst max-civ 35) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst max-civ 50) | |
#end-if | |
(defconst max-civ-pop 65) | |
(defconst del-civ-pop 72) | |
(defconst max-pop 75) | |
(defconst tc-level-one 1) | |
(defconst tc-level-two 1) | |
(defconst tc-level-three 1) | |
(defconst tc-level-four 2) | |
(defconst tc-level-five 2) | |
(defconst low-min-number-upgrade 2) | |
(defconst mid-min-number-upgrade 4) | |
(defconst high-min-number-upgrade 6) | |
(defconst max-trade-pop 7) | |
#end-if | |
#load-if-defined POPULATION-CAP-100 | |
(defconst max-fleet 40) | |
(defconst twenty-five-percent-pop 25) | |
(defconst thirty-percent-pop 30) | |
(defconst fourty-percent-pop 40) | |
(defconst sixty-percent-pop 60) | |
(defconst seventy-five-percent-pop 75) | |
(defconst eighty-five-percent-pop 85) | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst max-civ 5) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst max-civ 14) | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst max-civ 26) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst max-civ 42) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst max-civ 65) | |
#end-if | |
(defconst max-civ-pop 95) | |
(defconst del-civ-pop 98) | |
(defconst max-pop 100) | |
(defconst tc-level-one 1) | |
(defconst tc-level-two 2) | |
(defconst tc-level-three 2) | |
(defconst tc-level-four 2) | |
(defconst tc-level-five 3) | |
(defconst low-min-number-upgrade 2) | |
(defconst mid-min-number-upgrade 5) | |
(defconst high-min-number-upgrade 8) | |
(defconst max-trade-pop 10) | |
#end-if | |
#load-if-defined POPULATION-CAP-125 | |
(defconst max-fleet 50) | |
(defconst twenty-five-percent-pop 32) | |
(defconst thirty-percent-pop 37) | |
(defconst fourty-percent-pop 50) | |
(defconst sixty-percent-pop 75) | |
(defconst seventy-five-percent-pop 94) | |
(defconst eighty-five-percent-pop 106) | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst max-civ 6) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst max-civ 16) | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst max-civ 32) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst max-civ 54) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst max-civ 75) | |
#end-if | |
(defconst max-civ-pop 115) | |
(defconst del-civ-pop 123) | |
(defconst max-pop 125) | |
(defconst tc-level-one 1) | |
(defconst tc-level-two 2) | |
(defconst tc-level-three 2) | |
(defconst tc-level-four 3) | |
(defconst tc-level-five 3) | |
(defconst low-min-number-upgrade 3) | |
(defconst mid-min-number-upgrade 6) | |
(defconst high-min-number-upgrade 9) | |
(defconst max-trade-pop 12) | |
#end-if | |
#load-if-defined POPULATION-CAP-150 | |
(defconst max-fleet 56) | |
(defconst twenty-five-percent-pop 38) | |
(defconst thirty-percent-pop 45) | |
(defconst fourty-percent-pop 60) | |
(defconst sixty-percent-pop 90) | |
(defconst seventy-five-percent-pop 113) | |
(defconst eighty-five-percent-pop 128) | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst max-trade-pop 2) | |
(defconst max-civ 6) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst max-trade-pop 5) | |
(defconst max-civ 18) | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst max-trade-pop 8) | |
(defconst max-civ 39) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst max-trade-pop 12) | |
(defconst max-civ 65) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst max-trade-pop 15) | |
(defconst max-civ 90) | |
#end-if | |
(defconst max-civ-pop 140) | |
(defconst del-civ-pop 148) | |
(defconst max-pop 150) | |
(defconst tc-level-one 1) | |
(defconst tc-level-two 2) | |
(defconst tc-level-three 3) | |
(defconst tc-level-four 3) | |
(defconst tc-level-five 4) | |
(defconst low-min-number-upgrade 4) | |
(defconst mid-min-number-upgrade 7) | |
(defconst high-min-number-upgrade 10) | |
#end-if | |
#load-if-defined POPULATION-CAP-175 | |
(defconst max-fleet 66) | |
(defconst twenty-five-percent-pop 44) | |
(defconst thirty-percent-pop 52) | |
(defconst fourty-percent-pop 70) | |
(defconst sixty-percent-pop 105) | |
(defconst seventy-five-percent-pop 131) | |
(defconst eighty-five-percent-pop 149) | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst max-trade-pop 2) | |
(defconst max-civ 7) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst max-trade-pop 5) | |
(defconst max-civ 20) | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst max-trade-pop 11) | |
(defconst max-civ 43) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst max-trade-pop 24) | |
(defconst max-civ 80) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst max-trade-pop 35) | |
(defconst max-civ 110) | |
#end-if | |
(defconst max-civ-pop 165) | |
(defconst del-civ-pop 173) | |
(defconst max-pop 175) | |
(defconst tc-level-one 1) | |
(defconst tc-level-two 2) | |
(defconst tc-level-three 3) | |
(defconst tc-level-four 4) | |
(defconst tc-level-five 5) | |
(defconst low-min-number-upgrade 4) | |
(defconst mid-min-number-upgrade 8) | |
(defconst high-min-number-upgrade 12) | |
#end-if | |
#load-if-defined POPULATION-CAP-200 | |
#load-if-not-defined POPULATION-CAP-EXTENDED | |
(defconst max-fleet 75) | |
(defconst twenty-five-percent-pop 50) | |
(defconst thirty-percent-pop 60) | |
(defconst fourty-percent-pop 80) | |
(defconst sixty-percent-pop 120) | |
(defconst seventy-five-percent-pop 150) | |
(defconst eighty-five-percent-pop 170) | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst max-trade-pop 2) | |
(defconst max-civ 7) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst max-trade-pop 5) | |
(defconst max-civ 21) | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst max-trade-pop 13) | |
(defconst max-civ 48) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst max-trade-pop 26) | |
(defconst max-civ 89) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst max-trade-pop 40) | |
(defconst max-civ 125) | |
#end-if | |
(defconst max-civ-pop 185) | |
#load-if-not-defined GOTHIC-CIV | |
(defconst del-civ-pop 196) | |
(defconst max-pop 200) | |
#else | |
(defconst del-civ-pop 206) | |
(defconst max-pop 210) | |
#end-if | |
#end-if | |
(defconst tc-level-one 1) | |
(defconst tc-level-two 2) | |
(defconst tc-level-three 3) | |
(defconst tc-level-four 4) | |
(defconst tc-level-five 5) | |
(defconst low-min-number-upgrade 4) | |
(defconst mid-min-number-upgrade 8) | |
(defconst high-min-number-upgrade 12) | |
#end-if | |
#load-if-defined POPULATION-CAP-225 | |
(defconst max-fleet 78) | |
(defconst twenty-five-percent-pop 56) | |
(defconst thirty-percent-pop 66) | |
(defconst fourty-percent-pop 90) | |
(defconst sixty-percent-pop 135) | |
(defconst seventy-five-percent-pop 169) | |
(defconst eighty-five-percent-pop 191) | |
(defconst tc-level-one 1) | |
(defconst tc-level-two 2) | |
(defconst tc-level-three 3) | |
(defconst tc-level-four 4) | |
(defconst tc-level-five 5) | |
(defconst low-min-number-upgrade 4) | |
(defconst mid-min-number-upgrade 8) | |
(defconst high-min-number-upgrade 12) | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst max-trade-pop 2) | |
(defconst max-civ 8) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst max-trade-pop 6) | |
(defconst max-civ 23) | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst max-trade-pop 15) | |
(defconst max-civ 52) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst max-trade-pop 29) | |
(defconst max-civ 95) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst max-trade-pop 45) | |
(defconst max-civ 135) | |
#end-if | |
(defconst max-civ-pop 210) | |
(defconst del-civ-pop 221) | |
(defconst max-pop 225) | |
#end-if | |
#load-if-defined POPULATION-CAP-EXTENDED; Load for Pop >= 250 | |
#load-if-not-defined POPULATION-CAP-225 | |
(defconst max-fleet 90) | |
(defconst twenty-five-percent-pop 63) | |
(defconst thirty-percent-pop 75) | |
(defconst fourty-percent-pop 100) | |
(defconst sixty-percent-pop 150) | |
(defconst seventy-five-percent-pop 187) | |
(defconst eighty-five-percent-pop 213) | |
(defconst tc-level-one 1) | |
(defconst tc-level-two 2) | |
(defconst tc-level-three 3) | |
(defconst tc-level-four 4) | |
(defconst tc-level-five 5) | |
(defconst low-min-number-upgrade 4) | |
(defconst mid-min-number-upgrade 8) | |
(defconst high-min-number-upgrade 12) | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst max-trade-pop 2) | |
(defconst max-civ 8) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst max-trade-pop 8) | |
(defconst max-civ 25) | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst max-trade-pop 18) | |
(defconst max-civ 58) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst max-trade-pop 33) | |
(defconst max-civ 103) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst max-trade-pop 60) | |
(defconst max-civ 140) | |
#end-if | |
(defconst max-civ-pop 220) | |
(defconst del-civ-pop 246) | |
(defconst max-pop 250) | |
#end-if | |
#end-if | |
#load-if-defined DIFFICULTY-EASIEST | |
(defconst ability-to-dodge 100) | |
(defconst ability-to-kite 100) | |
(defconst enable-patrol 0) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defconst ability-to-dodge 75) | |
(defconst ability-to-kite 75) | |
(defconst enable-patrol 0) | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defconst ability-to-dodge 50) | |
(defconst ability-to-kite 50) | |
(defconst enable-patrol 0) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defconst ability-to-dodge 25) | |
(defconst ability-to-kite 25) | |
(defconst enable-patrol 1) | |
#end-if | |
#load-if-defined DIFFICULTY-HARDEST | |
(defconst ability-to-dodge 0) | |
(defconst ability-to-kite 0) | |
(defconst enable-patrol 1) | |
#end-if | |
#load-if-defined ARABIA-MAP | |
(defconst additional-town-center-placed-distance 14) | |
(defconst pop60-town-size 16) | |
(defconst pop90-town-size 20) | |
(defconst pop120-town-size 24) | |
#end-if | |
#load-if-defined ARENA-MAP | |
(defconst additional-town-center-placed-distance 16) | |
(defconst pop60-town-size 20) | |
(defconst pop90-town-size 24) | |
(defconst pop120-town-size 24) | |
#end-if | |
#load-if-not-defined ARENA-MAP | |
#load-if-not-defined ARABIA-MAP | |
(defconst additional-town-center-placed-distance 16) | |
(defconst pop60-town-size 20) | |
(defconst pop90-town-size 24) | |
(defconst pop120-town-size 28) | |
#end-if | |
#end-if | |
#load-if-not-defined INCAN-CIV | |
#load-if-not-defined FRANKISH-CIV | |
(defconst castle-stone 650) | |
#else ; Franks | |
(defconst castle-stone 488) | |
#end-if | |
#else ; Incas | |
(defconst castle-stone 553) | |
#end-if | |
#load-if-defined UP-POCKET-POSITION | |
(defconst scouting-type scout-mirror) | |
#else | |
(defconst scouting-type scout-flank) | |
#end-if | |
; The locations that are currently implemented are center, mirror, opposite, and enemy. | |
; Corner, border, and flank are the ones that aren't currently implemented. | |
(defrule | |
(true) | |
=> | |
(set-strategic-number sn-maximum-town-size 8) | |
(set-strategic-number sn-total-number-explorers 13);start with all civilians as explorer and turn them off when sheep or berries are found | |
(set-strategic-number sn-percent-civilian-explorers 100) | |
(set-strategic-number sn-minimum-civilian-explorers 12) | |
(set-strategic-number sn-number-explore-groups 1);explore with scouts | |
(set-difficulty-parameter ability-to-dodge-missiles ability-to-dodge); 0 = dodge | |
(set-difficulty-parameter ability-to-maintain-distance ability-to-kite); 0 = kite | |
(set-strategic-number sn-percent-enemy-sighted-response 100);fight with all men | |
(set-strategic-number sn-group-commander-selection-method 0) | |
(set-strategic-number sn-ignore-attack-group-under-attack 0) | |
(set-strategic-number sn-attack-group-size-randomness 0) | |
(set-strategic-number sn-scale-minimum-attack-group-size 0) | |
(set-strategic-number sn-scale-maximum-attack-group-size 0) | |
(set-strategic-number sn-group-leader-defense-distance 3); increases chance to make a few big groups instead of many medium sized ones | |
(disable-self) | |
) | |
(defrule | |
(true) | |
=> | |
(set-strategic-number sn-intelligent-gathering 1);drop resources when switched to another type | |
(set-strategic-number sn-retask-gather-amount 0);minimum amount to collect before allowed to switch | |
(set-strategic-number sn-camp-max-distance camp-distance);small distances at the start | |
(set-strategic-number sn-mill-max-distance mill-distance) | |
(set-strategic-number sn-cap-civilian-builders 100); maximum villagers that can be tasked as builder | |
(set-strategic-number sn-cap-civilian-explorers 100); maximum villagers that can be tasked as explorer | |
(set-strategic-number sn-maximum-hunt-drop-distance hunt-distance);Dont walk all over the map for resources | |
(set-strategic-number sn-maximum-food-drop-distance food-distance) | |
(set-strategic-number sn-maximum-wood-drop-distance wood-distance) | |
(set-strategic-number sn-maximum-stone-drop-distance 0) | |
(set-strategic-number sn-maximum-gold-drop-distance 0) | |
(set-strategic-number sn-blot-exploration-map 0);1=rexplore | |
(set-strategic-number sn-blot-size blot-size);15=default, 0 scouts w/ high LOS, 1 rest | |
(set-strategic-number sn-sentry-distance-variation 0) | |
(disable-self) | |
) | |
(defrule | |
(true) | |
=> | |
(set-strategic-number sn-group-form-distance 20) | |
(set-strategic-number sn-consecutive-idle-unit-limit 0) | |
(set-strategic-number sn-percent-attack-soldiers 100);attack with all men | |
(set-strategic-number sn-attack-winning-player 1);attacks the player with most points, irrelevant for us | |
(set-strategic-number sn-attack-winning-player-factor 10000) | |
(set-strategic-number sn-attack-intelligence 1);doesn't really avoid TC/castle fire, but better than nothing | |
(set-strategic-number sn-build-frequency 1);sometimes it helps when AI trys to build next to enemy and get interrupted | |
(set-strategic-number sn-number-build-attempts-before-skip 5) | |
(set-strategic-number sn-max-skips-per-attempt 5) | |
(set-strategic-number sn-coop-share-attacking 1); usually helps ally too late, but better than nothing | |
(set-strategic-number sn-coop-share-information 1); gives information to an AI ally | |
(set-strategic-number sn-garrison-rams 0) | |
(set-strategic-number sn-current-age dark) | |
(set-strategic-number sn-minimum-water-body-size-for-dock 999); don't build docks in small puddles | |
(disable-self) | |
) | |
(defrule | |
(true) | |
=> | |
(set-strategic-number sn-target-evaluation-in-progress 0) | |
(set-strategic-number sn-target-evaluation-boat 0) | |
(set-strategic-number sn-target-evaluation-rof 0) | |
(set-strategic-number sn-target-evaluation-continent 0) | |
(set-strategic-number sn-target-evaluation-siege-weapon 500);high value => siege vs buildings, soldier vs soldier | |
(set-strategic-number sn-target-evaluation-distance evaluation-distance) | |
(set-strategic-number sn-target-evaluation-time-kill-ratio 0) | |
(set-strategic-number sn-target-evaluation-hitpoints evaluation-hitpoints) | |
(set-strategic-number sn-target-evaluation-damage-capability 1) | |
(set-strategic-number sn-target-evaluation-kills 0) | |
(set-strategic-number sn-target-evaluation-randomness 0) | |
(set-strategic-number sn-target-evaluation-attack-attempts 0) | |
(set-strategic-number sn-target-evaluation-range -100) | |
(set-strategic-number sn-special-attack-type2 special-attack-type2) | |
(disable-self) | |
) | |
(defrule | |
(true) | |
=> | |
(set-strategic-number sn-minimum-attack-group-size 1) | |
(set-strategic-number sn-zero-priority-distance 450) | |
(set-strategic-number sn-attack-group-gather-spacing 5) | |
(set-strategic-number sn-do-not-scale-for-difficulty-level 1) | |
(set-strategic-number sn-initial-exploration-required 0); ! | |
(set-strategic-number sn-gather-defense-units 1) | |
(set-strategic-number sn-ignore-tower-elevation 1) | |
(set-goal escrow-purpose-goal 0) | |
(generate-random-number 100) | |
(enable-timer civ-explore-timer 150) | |
(enable-timer attack-timer 1) | |
(enable-timer spread-military-timer 220) | |
(enable-timer one-minute-timer 60) | |
(disable-self) | |
) | |
(defrule | |
(true) | |
=> | |
(set-strategic-number sn-task-ungrouped-soldiers 0); spread military 0=no,1=yes | |
(set-strategic-number sn-forage-defend-priority 1) | |
(set-strategic-number sn-gold-defend-priority 1) | |
(set-strategic-number sn-stone-defend-priority 1) | |
(set-strategic-number sn-livestock-defend-priority 1) | |
(set-goal reset 0) | |
(set-goal control-goal 0); secondary unit | |
(set-goal enemy-goal 0); enemy strategy unkonwn | |
(set-goal increase-town-size-goal 0); disable TS increase | |
(set-goal strategy-goal default-strategy) | |
(set-goal unit-goal default-unit) | |
(set-goal ranged-unit-type-goal default-ranged) | |
(set-goal under-attack-goal 0); not under attack | |
(set-goal spread-military-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(true) | |
=> | |
; (set-strategic-number sn-percent-half-exploration 30); default | |
; (set-strategic-number sn-percent-exploration-required 0) | |
(set-strategic-number sn-number-enemy-objects-required 1) | |
(set-goal attackchat 1) | |
(set-goal stanceg 0) | |
(set-goal request 0) | |
(set-goal request2 0) | |
(up-assign-builders c: 621 c: 4) | |
(up-assign-builders c: town-center c: 4) | |
(enable-timer thirty 30) | |
(enable-timer tensec 10) | |
(set-goal retargetenemy yes) | |
(enable-timer two-minute-timer 120) | |
(set-goal defendchat no); soon to be reset | |
(set-strategic-number sn-allow-civilian-defense 1) | |
(disable-self) | |
) | |
(defrule | |
(true) | |
=> | |
(set-strategic-number sn-percent-building-cancellation 25) | |
(set-strategic-number sn-home-exploration-time home-exploration-time) | |
(set-strategic-number sn-minimum-boar-hunt-group-size 0) | |
; (set-strategic-number sn-enable-boar-hunting 2) | |
(set-strategic-number sn-number-civilian-militia 0) | |
(set-strategic-number sn-enable-patrol-attack enable-patrol) | |
(set-strategic-number sn-safe-town-size safe-town) | |
(set-goal nomad no) | |
(set-goal landnomad no) | |
(set-strategic-number sn-livestock-to-town-center 1) | |
(disable-self) | |
) | |
(defrule | |
(true) | |
=> | |
(enable-timer navy-attack-timer 1) | |
(enable-timer retreat-timer 1) | |
(enable-timer micro-timer 1) | |
(enable-timer garrison-timer 1) | |
(set-goal raid-goal 0) | |
(set-goal forward-goal -1) | |
(enable-timer defend-timer 10) | |
(set-goal position-goal pocket); nomad | |
(disable-self) | |
) | |
(defrule | |
(game-time < 10) | |
(wood-amount < 275) | |
(building-type-count-total town-center <= 0) | |
(up-compare-goal landnomad != yes) | |
=> | |
(set-goal nomad yes) | |
(set-goal landnomad yes) | |
(chat-local-to-self "Land-Nomad.") | |
(up-assign-builders c: town-center-foundation c: 10) | |
(disable-self)) | |
(defrule | |
(game-time < 10) | |
(wood-amount >= 275) | |
(building-type-count-total town-center <= 0) | |
(up-compare-goal nomad != yes) | |
=> | |
(set-goal nomad yes) | |
(chat-local-to-self "Nomad.") | |
(up-assign-builders c: town-center-foundation c: 10) | |
(disable-self)) | |
#load-if-not-defined DEATH-MATCH | |
#load-if-not-defined WONDER-RACE | |
#load-if-not-defined NOMAD-MAP | |
#load-if-not-defined UP-2-PLAYER-GAME | |
#load-if-defined UP-POCKET-POSITION | |
(defrule | |
; (strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(true);(game-time > 10) | |
=> | |
(set-goal position-goal pocket) | |
(set-goal strategy-goal pocket-strategy) | |
(set-goal unit-goal pocket-unit) | |
(set-goal control-goal 0) | |
(chat-local-to-self "I'm pocket.") | |
; (chat-to-player every-ally "I'm pocket.") | |
(disable-self)) | |
#else | |
(defrule | |
; (strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(true);(game-time > 10) | |
=> | |
(set-goal position-goal flank) | |
(chat-local-to-self "I'm flank.") | |
; (chat-to-player every-ally "I'm flank.") | |
(disable-self)) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-defined DEATH-MATCH | |
;#load-if-not-defined UP-2-PLAYER-GAME | |
#load-if-defined UP-POCKET-POSITION | |
(defrule | |
(true);(game-time > 10) | |
=> | |
(set-goal position-goal pocket) | |
(chat-local-to-self "I'm pocket.") | |
; (chat-to-player every-ally "I'm pocket.") | |
(disable-self)) | |
#else | |
(defrule | |
(true);(game-time > 10) | |
=> | |
(set-goal position-goal flank) | |
(chat-local-to-self "I'm flank.") | |
; (chat-to-player every-ally "I'm flank.") | |
(disable-self)) | |
#end-if | |
;#end-if | |
#end-if | |
(defrule | |
(unit-type-count-total 213 < 3) ; Dead female builder | |
(unit-type-count-total 225 < 3) ; Dead male builder | |
(building-type-count town-center >= 1) | |
(strategic-number sn-percent-building-cancellation > 10) | |
=> | |
(set-strategic-number sn-percent-building-cancellation 10)) | |
(defrule | |
(or (unit-type-count-total 213 >= 3) ; Dead female builder | |
(unit-type-count-total 225 >= 3)) ; Dead male builder | |
(population < max-civ-pop) | |
(building-type-count town-center >= 1) | |
(strategic-number sn-percent-building-cancellation < 100) | |
=> | |
(set-strategic-number sn-percent-building-cancellation 100) | |
; (chat-local-to-self "Resetting townsize."); test | |
; (set-strategic-number sn-maximum-town-size 12) | |
) | |
(defrule | |
(building-type-count town-center <= 0) | |
(building-type-count-total town-center >= 1) | |
(strategic-number sn-percent-building-cancellation > 0) | |
=> | |
(set-strategic-number sn-percent-building-cancellation 0)) | |
(defrule | |
(strategic-number sn-allow-adjacent-dropsites != 0) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0)) | |
(defrule | |
(true); clear these goals/SNs each rule pass | |
=> | |
(set-strategic-number sn-military-level 0) | |
(set-strategic-number sn-archer-threat 0) | |
(set-strategic-number sn-infantry-threat 0) | |
(set-strategic-number sn-cavalry-threat 0) | |
(set-goal anti-cavalry-threat-goal 0) | |
(set-goal anti-monk-threat-goal 0) | |
(set-goal monk-threat-goal 0) | |
(set-goal enemy-sighted-goal 0) | |
(set-goal attack-goal 0) | |
(set-goal farm-goal 0) | |
(set-goal housing-goal 0) | |
(set-goal enemy-boats-goal 0) | |
(set-goal hostilities-goal 0) | |
(set-goal save-wood-goal 0) | |
(set-goal math-goal 0) | |
) | |
(defrule | |
(true) | |
=> | |
(set-goal gather-inside-goal 0) | |
(set-goal split-rule-goal 0) | |
(set-goal tribute-goal 0) | |
(set-goal threat-source-goal 0) | |
(set-goal threat-target-goal 0) | |
(set-goal team-coordination-goal 0) | |
(up-get-threat-data threat-time-goal threat-player-goal threat-source-goal threat-target-goal) | |
(up-get-victory-data winning-player victory-type victory-time) | |
(up-modify-goal attacking-enemy-goal g:= threat-player-goal); replacement | |
) | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
#load-if-not-defined DIFFICULTY-MODERATE | |
(defrule | |
(true) | |
=> | |
(set-strategic-number sn-enable-training-queue 1) | |
(set-strategic-number sn-wall-targeting-mode 1) | |
(set-strategic-number sn-enable-new-building-system 1) | |
) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(players-building-count any-enemy > 0) | |
=> | |
(up-find-player enemy find-closest closest-enemy-goal) | |
; (up-modify-sn sn-focus-player-number g:= closest-enemy-goal) | |
; (up-chat-data-to-self "Focus-player: %d" g: closest-enemy-goal) | |
) | |
(defrule | |
(or (strategic-number sn-maximum-town-size >= 40) | |
(strategic-number sn-number-attack-groups >= 1)) | |
(up-compare-goal team-coordination-goal != 1) | |
=> | |
(set-goal team-coordination-goal 1) | |
) | |
(defrule | |
(or (game-time < 1200); don't block early villagers in DM | |
(nor (and (goal train-civ-goal -1) | |
(population >= max-civ-pop)) | |
(goal train-civ-goal 2))) | |
=> | |
(set-goal train-civ-goal 1) | |
) | |
(defrule | |
(taunt-detected any-ally 33) | |
(game-time > 300) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(chat-to-allies-using-id 22157) | |
(set-goal train-civ-goal 1) | |
) | |
(defrule | |
(current-age == imperial-age) | |
(population >= max-civ-pop) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(chat-to-allies-using-id 22154) | |
(set-goal train-civ-goal -1) | |
) | |
(defrule | |
(game-time > 1800) | |
(or (or (dropsite-min-distance wood == -1); wood gone | |
(dropsite-min-distance wood == 480)); or remaining wood is on other islands | |
(and (unit-type-count-total villager > thirty-percent-pop) | |
(game-type == 8))) | |
=> | |
(set-goal train-civ-goal -1) | |
) | |
(defrule | |
(current-age == imperial-age) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(or (and (unit-type-count villager > twenty-five-percent-pop) | |
(game-time > 2700)) | |
(and (and (players-unit-type-count every-enemy galley-line < 15) | |
(players-unit-type-count every-enemy fire-ship-line < 15)) | |
(warboat-count > 25))) | |
=> | |
(set-goal train-civ-goal -1) | |
) | |
(defrule | |
(current-age == imperial-age) | |
(strategic-number sn-resource-control < 1) | |
(up-compare-goal escrow-purpose-goal != ri-halberdier) | |
(civilian-population >= max-civ); more than enough civ, usually achieved by adding trade carts | |
(or (gold-amount > 800); and enough of all resources | |
(and (civilian-population > sixty-percent-pop) | |
(unit-type-count trade-cart > 0))) | |
(wood-amount > 800) | |
(food-amount > 800) | |
(population > del-civ-pop) | |
(unit-type-count-total villager >= 12) | |
(population-cap <= 250) | |
=> | |
(delete-unit villager) | |
(set-goal train-civ-goal -1) | |
(chat-local-to-self "Deleting excess villagers.") | |
) | |
(defrule | |
; (game-time < 60) | |
(unit-type-count-total villager > 0) | |
(building-type-count-total lumber-camp >= 1) | |
(wood-amount < 275) | |
(strategic-number sn-number-explore-groups == 101) | |
=> | |
(set-strategic-number sn-percent-civilian-explorers 0) | |
(set-strategic-number sn-cap-civilian-explorers 0) | |
(set-strategic-number sn-total-number-explorers 1) | |
(set-strategic-number sn-number-explore-groups 1)) | |
(defrule | |
; (game-time < 60) | |
(unit-type-count-total villager > 0) | |
(building-type-count-total mining-camp >= 1) | |
(stone-amount < 100) | |
(strategic-number sn-number-explore-groups == 101) | |
=> | |
(set-strategic-number sn-percent-civilian-explorers 0) | |
(set-strategic-number sn-cap-civilian-explorers 0) | |
(set-strategic-number sn-total-number-explorers 1) | |
(set-strategic-number sn-number-explore-groups 1)) | |
(defrule | |
; (game-time < 60) | |
(unit-type-count-total villager > 0) | |
(building-type-count town-center >= 1); -total | |
(strategic-number sn-number-explore-groups == 101) | |
=> | |
(set-strategic-number sn-percent-civilian-explorers 0) | |
(set-strategic-number sn-cap-civilian-explorers 0) | |
(set-strategic-number sn-total-number-explorers 1) | |
(set-strategic-number sn-number-explore-groups 1)) | |
(defrule | |
(game-time < 120) | |
(unit-type-count-total villager > 0) | |
(building-type-count-total town-center == 0) | |
(building-type-count-total lumber-camp == 0) | |
(wood-amount < 275) | |
=> | |
(set-strategic-number sn-percent-civilian-explorers 100) | |
(set-strategic-number sn-cap-civilian-explorers 100) | |
(set-strategic-number sn-total-number-explorers 101) | |
(set-strategic-number sn-number-explore-groups 101)) | |
(defrule | |
(game-time < 120) | |
(unit-type-count-total villager > 0) | |
(building-type-count-total town-center == 0) | |
(building-type-count-total mining-camp == 0) | |
(stone-amount < 100) | |
=> | |
(set-strategic-number sn-percent-civilian-explorers 100) | |
(set-strategic-number sn-cap-civilian-explorers 100) | |
(set-strategic-number sn-total-number-explorers 101) | |
(set-strategic-number sn-number-explore-groups 101)) | |
(defrule | |
; (game-time < 120) | |
(unit-type-count-total villager > 0) | |
(building-type-count-total town-center == 0) | |
(wood-amount >= 275) | |
(stone-amount >= 100) | |
=> | |
(set-strategic-number sn-wood-gatherer-percentage 20) | |
(set-strategic-number sn-food-gatherer-percentage 80); provisory | |
(set-strategic-number sn-percent-civilian-explorers 100) | |
(set-strategic-number sn-cap-civilian-explorers 100) | |
(set-strategic-number sn-total-number-explorers 101) | |
(set-strategic-number sn-number-explore-groups 101)) | |
(defrule ; 126 | |
(or (building-type-count-total town-center == 0) | |
(and (up-pending-objects c: town-center == 0) | |
(building-type-count town-center == 0))); just to be sure | |
; (goal increase-town-size-goal 0) | |
(can-build town-center) | |
; (wood-amount >= 275) | |
; (stone-amount >= 100) | |
; (building-available town-center) | |
=> | |
(set-goal increase-town-size-goal 0) | |
(build town-center) | |
; (set-goal increase-town-size-goal town-center) | |
(chat-local-to-self "Trying to get a TC up.") | |
) | |
(defrule | |
(building-type-count-total mill >= 1) | |
(or (wood-amount >= 200) | |
(dropsite-min-distance wood s:<= sn-maximum-wood-drop-distance)) | |
(strategic-number sn-wood-gatherer-percentage < 5) | |
(strategic-number sn-minimum-civilian-explorers >= 1) | |
=> | |
(set-strategic-number sn-percent-civilian-explorers 0) | |
(set-strategic-number sn-minimum-civilian-explorers 0) | |
(set-strategic-number sn-cap-civilian-explorers 0) | |
(set-strategic-number sn-total-number-explorers 1) | |
(set-strategic-number sn-number-explore-groups 1)) | |
(defrule | |
(or (unit-type-count scout-unit >= 1) | |
(current-age <= dark-age)) | |
(or (players-building-count every-enemy >= 1) | |
(current-age <= dark-age)) | |
(building-type-count-total mill >= 1) | |
(building-type-count-total lumber-camp >= 1) | |
(dropsite-min-distance wood s:<= sn-maximum-wood-drop-distance) | |
(strategic-number sn-minimum-civilian-explorers >= 1) | |
=> | |
(set-strategic-number sn-percent-civilian-explorers 0) | |
(set-strategic-number sn-minimum-civilian-explorers 0) | |
(set-strategic-number sn-cap-civilian-explorers 0) | |
(set-strategic-number sn-total-number-explorers 1) | |
(set-strategic-number sn-number-explore-groups 1)) | |
(defrule | |
(unit-type-count scout-unit <= 0) | |
(or (not (resource-found wood)) | |
(or (dropsite-min-distance wood s:> sn-maximum-wood-drop-distance) | |
(dropsite-min-distance wood > 7))) | |
(strategic-number sn-wood-gatherer-percentage >= 5) | |
(building-type-count town-center >= 1); -total | |
=> | |
(set-strategic-number sn-percent-civilian-explorers 100) | |
(set-strategic-number sn-minimum-civilian-explorers 1) | |
(set-strategic-number sn-cap-civilian-explorers 1) | |
(set-strategic-number sn-total-number-explorers 2) | |
(set-strategic-number sn-number-explore-groups 2)) | |
(defrule | |
(or (unit-type-count-total villager <= 1) | |
(unit-type-count scout-unit >= 1)) | |
(strategic-number sn-current-age >= fc-transit); provisory | |
(strategic-number sn-minimum-civilian-explorers >= 1) | |
=> | |
(set-strategic-number sn-percent-civilian-explorers 0) | |
(set-strategic-number sn-minimum-civilian-explorers 0) | |
(set-strategic-number sn-cap-civilian-explorers 0) | |
(set-strategic-number sn-total-number-explorers 1) | |
(set-strategic-number sn-number-explore-groups 1)) | |
(defrule | |
(resource-found wood) | |
(building-type-count-total town-center == 0) | |
(building-type-count-total lumber-camp == 0) | |
(wood-amount < 275) | |
(can-build lumber-camp) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0); testing | |
(set-strategic-number sn-wood-gatherer-percentage 100) | |
(set-strategic-number sn-maximum-wood-drop-distance 480) | |
(build lumber-camp)) | |
(defrule | |
(resource-found stone) | |
(building-type-count-total town-center == 0) | |
(building-type-count-total mining-camp < 1) | |
(or (wood-amount >= 260) | |
(building-type-count-total lumber-camp > 0)) | |
(stone-amount < 100) | |
(can-build mining-camp) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mining-camp)) | |
#load-if-defined DEFEND-WONDER | |
(defrule | |
(unit-type-count-total villager > fourty-percent-pop) | |
=> | |
(set-goal train-civ-goal -1) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control != 3) | |
(nand | |
(strategic-number sn-current-age == feudal) | |
(and | |
(strategic-number sn-resource-control == 2) | |
(goal under-attack-goal 0) | |
) | |
) | |
=> | |
(set-strategic-number sn-resource-control 0) | |
) | |
#load-if-defined WONDER-RACE | |
(defrule | |
(true) | |
=> | |
(set-goal strategy-goal fast-imp);overwrite all other settings | |
(set-goal unit-goal wonder) | |
(set-goal control-goal wonder) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(building-type-count-total university < 1) | |
(current-age == castle-age) | |
(wood-amount >= 200) | |
=> | |
(set-goal increase-town-size-goal university) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
(can-research ri-treadmill-crane) | |
=> | |
(research ri-treadmill-crane)) | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
=> | |
(enable-timer 6 60)(disable-self) | |
) | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
(timer-triggered 6) | |
(food-amount < 300); ri-stonecutting | |
(can-buy-commodity food) | |
(research-available ri-stonecutting) | |
=> | |
(buy-commodity food) | |
) | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
(not (research-available ri-stonecutting)) | |
=> | |
(sell-commodity food) | |
(delete-building farm) | |
(enable-timer lumber-timer 1200) | |
) | |
(defrule | |
(current-age == imperial-age) | |
(wood-amount > 1100) | |
(can-sell-commodity wood) | |
=> | |
(sell-commodity wood) | |
) | |
(defrule | |
(current-age == imperial-age) | |
(wood-amount < 1000) | |
(gold-amount > 1150) | |
(commodity-buying-price wood <= 150) | |
=> | |
(buy-commodity wood) | |
) | |
(defrule | |
(current-age == imperial-age) | |
(stone-amount < 1000) | |
(gold-amount > 1174) | |
(commodity-buying-price stone <= 175) | |
=> | |
(buy-commodity stone) | |
) | |
(defrule | |
(can-build wonder) | |
=> | |
(build wonder) | |
) | |
(defrule | |
(building-type-count-total wonder > 0) | |
=> | |
(delete-building blacksmith) | |
(delete-building market) | |
(delete-building university) | |
(delete-building monastery) | |
(delete-building town-center) | |
(set-goal increase-town-size-goal 2); block build system | |
) | |
#else | |
;******************** NAVY INITIALISATION ******************** | |
(defrule | |
(or (goal enemy-boats-goal 1) | |
(players-building-type-count any-enemy dock > 0)) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(building-type-count-total blacksmith > 0) | |
=> | |
(enable-wall-placement 2) | |
(set-strategic-number sn-minimum-water-body-size-for-dock water-mixed) | |
(set-strategic-number sn-percent-attack-soldiers 0) | |
(set-strategic-number sn-number-boat-explore-groups 0) | |
(chat-to-player my-player-number "The enemy goes for water, treating this as a watermap now.") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(taunt-detected any-human 34) | |
=> | |
(acknowledge-taunt every-human 34) | |
(acknowledge-taunt every-human 35) | |
(enable-wall-placement 2) | |
(set-strategic-number sn-minimum-water-body-size-for-dock water-mixed) | |
(set-strategic-number sn-percent-attack-soldiers 0) | |
(set-strategic-number sn-number-boat-explore-groups 0) | |
; (chat-to-allies-using-id 7110); "Yes." | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed) | |
(taunt-detected any-human 35) | |
=> | |
(set-strategic-number sn-minimum-water-body-size-for-dock 999) | |
; (chat-to-allies-using-id 7110); "Yes." | |
) | |
#load-if-not-defined FORTRESS-MAP | |
#load-if-not-defined OASIS-MAP | |
#load-if-not-defined SALT-MARSH-MAP | |
(defrule | |
(or (cc-players-unit-type-count 0 shore-fish >= shorefishreq) ; a lot | |
(or (cc-players-unit-type-count 0 sea-fish >= deepfishreq); a lot | |
(and (cc-players-unit-type-count 0 shore-fish >= shorefishreq2); a bit | |
(cc-players-unit-type-count 0 sea-fish >= deepfishreq2)))); a bit | |
=> | |
(enable-wall-placement 2) | |
(set-strategic-number sn-minimum-water-body-size-for-dock water-mixed) | |
(set-strategic-number sn-percent-attack-soldiers 0) | |
(set-strategic-number sn-number-boat-explore-groups 0) | |
(chat-to-player my-player-number "This map has fish.") | |
(disable-self)) | |
#else | |
(defrule | |
(true) | |
=> | |
(enable-wall-placement 2) | |
(set-strategic-number sn-maximum-fish-boat-drop-distance 14) | |
(set-strategic-number sn-minimum-water-body-size-for-dock water-mixed) | |
(set-strategic-number sn-percent-attack-soldiers 0) | |
(set-strategic-number sn-number-boat-explore-groups 0) | |
(chat-to-player my-player-number "This map has fish.") | |
(disable-self)) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(or (map-type islands) | |
(map-type team-islands)) | |
(strategic-number sn-minimum-water-body-size-for-dock != water-islands) | |
=> | |
(set-strategic-number sn-garrison-rams 0); don't load rams or the computer messes up with transports | |
(set-strategic-number sn-minimum-water-body-size-for-dock water-islands) | |
(set-strategic-number sn-group-form-distance 30); big distances to load transport ships | |
(set-goal strategy-goal rush) | |
(chat-to-player my-player-number "Defined as island-map.")) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed) | |
(wall-completed-percentage 2 >= 100) | |
(players-building-type-count my-player-number stone-wall < 15); this will be only true on islands | |
(players-building-type-count my-player-number palisade-wall < 15) | |
=> | |
(set-strategic-number sn-garrison-rams 0); don't load rams or the computer messes up with transports | |
(set-strategic-number sn-minimum-water-body-size-for-dock water-islands) | |
(set-strategic-number sn-group-form-distance 30); big distances to load transport ships | |
(set-goal strategy-goal rush) | |
(chat-to-player my-player-number "Islands?") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed) | |
(or (goal unit-goal skirmisher) | |
(goal unit-goal archer)) | |
(up-compare-goal strategy-goal != flush) | |
(current-age < castle-age) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal my-unique-unit-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(or (goal unit-goal my-unique-unit-line) | |
(or (goal unit-goal skirmisher) | |
(goal unit-goal archer))) | |
(current-age < castle-age) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal militiaman-line) | |
) | |
(defrule | |
(not (taunt-detected any-human 35)) | |
(or (players-unit-type-count any-enemy longboat-line > 0) | |
(or (players-unit-type-count any-enemy galley-line > 0) | |
(players-unit-type-count any-enemy fire-ship-line > 0))) | |
=> | |
(set-goal enemy-boats-goal 1) | |
) | |
(defrule | |
(not (taunt-detected any-human 35)) | |
(building-type-count dock > 0) | |
(or (players-building-type-count any-enemy dock > 0) | |
(players-unit-type-count any-enemy fishing-ship > 0)) | |
=> | |
(set-goal enemy-boats-goal 1) | |
) | |
(defrule | |
(not (player-in-game any-ally)) | |
(player-valid 3) | |
(game-time > 13) | |
=> | |
(set-goal nr-map-goal 1) | |
(set-goal ffa-game-goal 1) | |
(disable-self) | |
) | |
;******************** MILITARY SUPERIORITY CODE ******************** | |
; -1 = -5 units | |
; 1 = +5 units | |
; 2 = enemy has < 70% of our military | |
; 3 = enemy has < 55% of our military | |
(defrule | |
(military-population > 7) | |
(or | |
(military-population > 15) | |
(players-military-population target-player < 4) | |
) | |
(or | |
(military-population > 20) | |
(players-military-population target-player < 10) | |
) | |
(or | |
(military-population > 25) | |
(players-military-population target-player < 15) | |
) | |
(or | |
(military-population > 30) | |
(players-military-population target-player < 20) | |
) | |
(players-military-population target-player < 25) | |
=> | |
(set-strategic-number sn-military-level 1) | |
) | |
(defrule | |
(military-population > 35) | |
(or | |
(military-population > 40) | |
(players-military-population target-player < 30) | |
) | |
(or | |
(military-population > 45) | |
(players-military-population target-player < 35) | |
) | |
(or | |
(military-population > 50) | |
(players-military-population target-player < 40) | |
) | |
(or | |
(military-population > 55) | |
(players-military-population target-player < 45) | |
) | |
(players-military-population target-player < 50) | |
=> | |
(set-strategic-number sn-military-level 1) | |
) | |
(defrule | |
(military-population > 60) | |
(or | |
(military-population > 65) | |
(players-military-population target-player < 55) | |
) | |
(or | |
(military-population > 70) | |
(players-military-population target-player < 60) | |
) | |
(or | |
(military-population > 75) | |
(players-military-population target-player < 65) | |
) | |
(or | |
(military-population > 80) | |
(players-military-population target-player < 70) | |
) | |
(players-military-population target-player < 75) | |
=> | |
(set-strategic-number sn-military-level 1) | |
) | |
(defrule | |
(military-population > 85) | |
(or | |
(military-population > 90) | |
(players-military-population target-player < 80) | |
) | |
(or | |
(military-population > 95) | |
(players-military-population target-player < 85) | |
) | |
(or | |
(military-population > 100) | |
(players-military-population target-player < 90) | |
) | |
(or | |
(military-population > 105) | |
(players-military-population target-player < 95) | |
) | |
(players-military-population target-player < 100) | |
=> | |
(set-strategic-number sn-military-level 1) | |
) | |
(defrule | |
(military-population > 110) | |
(or | |
(military-population > 120) | |
(players-military-population target-player < 105) | |
) | |
(or | |
(military-population > 140) | |
(players-military-population target-player < 115) | |
) | |
(or | |
(military-population > 160) | |
(players-military-population target-player < 135) | |
) | |
(or | |
(military-population > 180) | |
(players-military-population target-player < 155) | |
) | |
(players-military-population target-player < 175) | |
=> | |
(set-strategic-number sn-military-level 1) | |
) | |
(defrule | |
(military-population > 200) | |
(or | |
(military-population > 220) | |
(players-military-population target-player < 195) | |
) | |
(or | |
(military-population > 240) | |
(players-military-population target-player < 215) | |
) | |
(or | |
(military-population > 260) | |
(players-military-population target-player < 235) | |
) | |
(or | |
(military-population > 280) | |
(players-military-population target-player < 255) | |
) | |
(players-military-population target-player < 275) | |
=> | |
(set-strategic-number sn-military-level 1) | |
) | |
(defrule | |
(military-population > 300) | |
(or | |
(military-population > 320) | |
(players-military-population target-player < 295) | |
) | |
(or | |
(military-population > 340) | |
(players-military-population target-player < 315) | |
) | |
(or | |
(military-population > 360) | |
(players-military-population target-player < 335) | |
) | |
(or | |
(military-population > 380) | |
(players-military-population target-player < 355) | |
) | |
(players-military-population target-player < 375) | |
=> | |
(set-strategic-number sn-military-level 1) | |
) | |
(defrule | |
(military-population > 400) | |
(or | |
(military-population > 420) | |
(players-military-population target-player < 395) | |
) | |
(or | |
(military-population > 440) | |
(players-military-population target-player < 415) | |
) | |
(or | |
(military-population > 460) | |
(players-military-population target-player < 435) | |
) | |
(or | |
(military-population > 480) | |
(players-military-population target-player < 455) | |
) | |
(players-military-population target-player < 475) | |
=> | |
(set-strategic-number sn-military-level 1) | |
) | |
(defrule | |
(military-population > 10) | |
(or | |
(military-population > 15) | |
(players-military-population target-player < 2) | |
) | |
(or | |
(military-population > 20) | |
(players-military-population target-player < 10) | |
) | |
(or | |
(military-population > 25) | |
(players-military-population target-player < 14) | |
) | |
(or | |
(military-population > 30) | |
(players-military-population target-player < 17) | |
) | |
(players-military-population target-player < 21) | |
=> | |
(set-strategic-number sn-military-level 2) | |
) | |
(defrule | |
(military-population > 35) | |
(or | |
(military-population > 40) | |
(players-military-population target-player < 24) | |
) | |
(or | |
(military-population > 45) | |
(players-military-population target-player < 28) | |
) | |
(or | |
(military-population > 50) | |
(players-military-population target-player < 31) | |
) | |
(or | |
(military-population > 55) | |
(players-military-population target-player < 35) | |
) | |
(players-military-population target-player < 38) | |
=> | |
(set-strategic-number sn-military-level 2) | |
) | |
(defrule | |
(military-population > 60) | |
(or | |
(military-population > 65) | |
(players-military-population target-player < 42) | |
) | |
(or | |
(military-population > 70) | |
(players-military-population target-player < 45) | |
) | |
(or | |
(military-population > 75) | |
(players-military-population target-player < 49) | |
) | |
(or | |
(military-population > 80) | |
(players-military-population target-player < 52) | |
) | |
(players-military-population target-player < 56) | |
=> | |
(set-strategic-number sn-military-level 2) | |
) | |
(defrule | |
(military-population > 100) | |
(or | |
(military-population > 120) | |
(players-military-population target-player < 70) | |
) | |
(or | |
(military-population > 140) | |
(players-military-population target-player < 84) | |
) | |
(or | |
(military-population > 160) | |
(players-military-population target-player < 98) | |
) | |
(or | |
(military-population > 180) | |
(players-military-population target-player < 112) | |
) | |
(players-military-population target-player < 126) | |
=> | |
(set-strategic-number sn-military-level 2) | |
) | |
(defrule | |
(military-population > 200) | |
(or | |
(military-population > 220) | |
(players-military-population target-player < 140) | |
) | |
(or | |
(military-population > 240) | |
(players-military-population target-player < 154) | |
) | |
(or | |
(military-population > 260) | |
(players-military-population target-player < 168) | |
) | |
(or | |
(military-population > 280) | |
(players-military-population target-player < 182) | |
) | |
(players-military-population target-player < 196) | |
=> | |
(set-strategic-number sn-military-level 2) | |
) | |
(defrule | |
(military-population > 300) | |
(or | |
(military-population > 320) | |
(players-military-population target-player < 210) | |
) | |
(or | |
(military-population > 340) | |
(players-military-population target-player < 224) | |
) | |
(or | |
(military-population > 360) | |
(players-military-population target-player < 238) | |
) | |
(or | |
(military-population > 380) | |
(players-military-population target-player < 252) | |
) | |
(players-military-population target-player < 266) | |
=> | |
(set-strategic-number sn-military-level 2) | |
) | |
(defrule | |
(military-population > 400) | |
(or | |
(military-population > 420) | |
(players-military-population target-player < 280) | |
) | |
(or | |
(military-population > 440) | |
(players-military-population target-player < 294) | |
) | |
(or | |
(military-population > 460) | |
(players-military-population target-player < 308) | |
) | |
(or | |
(military-population > 480) | |
(players-military-population target-player < 322) | |
) | |
(players-military-population target-player < 336) | |
=> | |
(set-strategic-number sn-military-level 2) | |
) | |
(defrule | |
(military-population > 23) | |
(or | |
(military-population > 28) | |
(players-military-population target-player < 14) | |
) | |
(or | |
(military-population > 35) | |
(players-military-population target-player < 17) | |
) | |
(or | |
(military-population > 40) | |
(players-military-population target-player < 21) | |
) | |
(or | |
(military-population > 45) | |
(players-military-population target-player < 24) | |
) | |
(players-military-population target-player < 27) | |
=> | |
(set-strategic-number sn-military-level 3) | |
) | |
(defrule | |
(military-population > 50) | |
(or | |
(military-population > 55) | |
(players-military-population target-player < 30) | |
) | |
(or | |
(military-population > 60) | |
(players-military-population target-player < 33) | |
) | |
(or | |
(military-population > 65) | |
(players-military-population target-player < 36) | |
) | |
(or | |
(military-population > 70) | |
(players-military-population target-player < 39) | |
) | |
(players-military-population target-player < 42) | |
=> | |
(set-strategic-number sn-military-level 3) | |
) | |
(defrule | |
(military-population > 75) | |
(or | |
(military-population > 80) | |
(players-military-population target-player < 41) | |
) | |
(or | |
(military-population > 85) | |
(players-military-population target-player < 44) | |
) | |
(or | |
(military-population > 90) | |
(players-military-population target-player < 47) | |
) | |
(or | |
(military-population > 95) | |
(players-military-population target-player < 50) | |
) | |
(players-military-population target-player < 52) | |
=> | |
(set-strategic-number sn-military-level 3) | |
) | |
(defrule | |
(military-population > 100) | |
(or | |
(military-population > 120) | |
(players-military-population target-player < 55) | |
) | |
(or | |
(military-population > 140) | |
(players-military-population target-player < 66) | |
) | |
(or | |
(military-population > 160) | |
(players-military-population target-player < 77) | |
) | |
(or | |
(military-population > 180) | |
(players-military-population target-player < 88) | |
) | |
(players-military-population target-player < 99) | |
=> | |
(set-strategic-number sn-military-level 3) | |
) | |
(defrule | |
(military-population > 200) | |
(or | |
(military-population > 220) | |
(players-military-population target-player < 110) | |
) | |
(or | |
(military-population > 240) | |
(players-military-population target-player < 121) | |
) | |
(or | |
(military-population > 260) | |
(players-military-population target-player < 132) | |
) | |
(or | |
(military-population > 280) | |
(players-military-population target-player < 143) | |
) | |
(players-military-population target-player < 154) | |
=> | |
(set-strategic-number sn-military-level 3) | |
) | |
(defrule | |
(military-population > 300) | |
(or | |
(military-population > 320) | |
(players-military-population target-player < 165) | |
) | |
(or | |
(military-population > 340) | |
(players-military-population target-player < 176) | |
) | |
(or | |
(military-population > 360) | |
(players-military-population target-player < 187) | |
) | |
(or | |
(military-population > 380) | |
(players-military-population target-player < 198) | |
) | |
(players-military-population target-player < 209) | |
=> | |
(set-strategic-number sn-military-level 3) | |
) | |
(defrule | |
(military-population > 400) | |
(or | |
(military-population > 420) | |
(players-military-population target-player < 220) | |
) | |
(or | |
(military-population > 440) | |
(players-military-population target-player < 231) | |
) | |
(or | |
(military-population > 460) | |
(players-military-population target-player < 242) | |
) | |
(or | |
(military-population > 480) | |
(players-military-population target-player < 253) | |
) | |
(players-military-population target-player < 264) | |
=> | |
(set-strategic-number sn-military-level 3) | |
) | |
(defrule | |
(players-military-population target-player > 5) | |
(or | |
(military-population < 2) | |
(players-military-population target-player > 10) | |
) | |
(or | |
(military-population < 6) | |
(players-military-population target-player > 15) | |
) | |
(or | |
(military-population < 10) | |
(players-military-population target-player > 20) | |
) | |
(or | |
(military-population < 15) | |
(players-military-population target-player > 25) | |
) | |
(military-population < 20) | |
=> | |
(set-strategic-number sn-military-level -1) | |
) | |
(defrule | |
(players-military-population target-player > 30) | |
(or | |
(military-population < 25) | |
(players-military-population target-player > 35) | |
) | |
(or | |
(military-population < 30) | |
(players-military-population target-player > 40) | |
) | |
(or | |
(military-population < 35) | |
(players-military-population target-player > 45) | |
) | |
(or | |
(military-population < 40) | |
(players-military-population target-player > 50) | |
) | |
(military-population < 45) | |
=> | |
(set-strategic-number sn-military-level -1) | |
) | |
(defrule | |
(players-military-population target-player > 55) | |
(or | |
(military-population < 50) | |
(players-military-population target-player > 60) | |
) | |
(or | |
(military-population < 55) | |
(players-military-population target-player > 65) | |
) | |
(or | |
(military-population < 60) | |
(players-military-population target-player > 70) | |
) | |
(or | |
(military-population < 65) | |
(players-military-population target-player > 75) | |
) | |
(military-population < 70) | |
=> | |
(set-strategic-number sn-military-level -1) | |
) | |
(defrule | |
(players-military-population target-player > 80) | |
(or | |
(military-population < 75) | |
(players-military-population target-player > 85) | |
) | |
(or | |
(military-population < 80) | |
(players-military-population target-player > 90) | |
) | |
(or | |
(military-population < 85) | |
(players-military-population target-player > 95) | |
) | |
(or | |
(military-population < 90) | |
(players-military-population target-player > 100) | |
) | |
(military-population < 95) | |
=> | |
(set-strategic-number sn-military-level -1) | |
) | |
(defrule | |
(players-military-population target-player > 105) | |
(or | |
(military-population < 100) | |
(players-military-population target-player > 120) | |
) | |
(or | |
(military-population < 115) | |
(players-military-population target-player > 140) | |
) | |
(or | |
(military-population < 135) | |
(players-military-population target-player > 160) | |
) | |
(or | |
(military-population < 155) | |
(players-military-population target-player > 180) | |
) | |
(military-population < 175) | |
=> | |
(set-strategic-number sn-military-level -1) | |
) | |
(defrule | |
(players-military-population target-player > 200) | |
(or | |
(military-population < 195) | |
(players-military-population target-player > 220) | |
) | |
(or | |
(military-population < 215) | |
(players-military-population target-player > 240) | |
) | |
(or | |
(military-population < 235) | |
(players-military-population target-player > 260) | |
) | |
(or | |
(military-population < 255) | |
(players-military-population target-player > 280) | |
) | |
(military-population < 275) | |
=> | |
(set-strategic-number sn-military-level -1) | |
) | |
(defrule | |
(players-military-population target-player > 300) | |
(or | |
(military-population < 295) | |
(players-military-population target-player > 320) | |
) | |
(or | |
(military-population < 315) | |
(players-military-population target-player > 340) | |
) | |
(or | |
(military-population < 335) | |
(players-military-population target-player > 360) | |
) | |
(or | |
(military-population < 355) | |
(players-military-population target-player > 380) | |
) | |
(military-population < 375) | |
=> | |
(set-strategic-number sn-military-level -1) | |
) | |
(defrule | |
(players-military-population target-player > 400) | |
(or | |
(military-population < 395) | |
(players-military-population target-player > 420) | |
) | |
(or | |
(military-population < 415) | |
(players-military-population target-player > 440) | |
) | |
(or | |
(military-population < 435) | |
(players-military-population target-player > 460) | |
) | |
(or | |
(military-population < 455) | |
(players-military-population target-player > 480) | |
) | |
(military-population < 475) | |
=> | |
(set-strategic-number sn-military-level -1) | |
) | |
(defrule | |
(population >= del-civ-pop) | |
(goal escrow-purpose-goal 0) | |
(or (research-completed ri-bracer) | |
(or (research-completed ri-plate-mail) | |
(or (research-completed ri-plate-barding) | |
(or (research-completed ri-blast-furnace) | |
(research-completed ri-ring-archer-armor))))) | |
(strategic-number sn-military-level <= 0) | |
=> | |
(set-strategic-number sn-military-level 1)) | |
(defrule | |
(population >= del-civ-pop) | |
(current-age-time > 180) | |
(current-age >= imperial-age) | |
(goal escrow-purpose-goal 0) | |
(strategic-number sn-military-level <= 0) | |
=> | |
(set-strategic-number sn-military-level 1)) | |
(defrule | |
(or (military-population >= 2) | |
(or (players-military-population any-ally >= 2) | |
(players-military-population any-enemy >= 2))) | |
(timer-triggered one-minute-timer) | |
=> | |
(up-chat-data-to-self "Military level: %d." s: sn-military-level) | |
) | |
#load-if-defined UP-MULTIPLE-ENEMIES ; counter the actual attacker too | |
(defrule ; but only when we're actually under attack | |
(nor (unit-type-count castle-arrow > 0) | |
(or (unit-type-count castle-arrow-chemistry > 0) | |
(or (unit-type-count tc-arrow > 0) | |
(goal under-attack-goal 1)))) | |
=> | |
(up-jump-rule 2)) | |
(defrule | |
(up-compare-goal threat-player-goal >= 1) | |
(up-compare-goal threat-player-goal < 8) | |
(strategic-number sn-target-player-number g:!= threat-player-goal) | |
(strategic-number sn-target-player-number s:== sn-focus-player-number) | |
=> | |
(up-modify-goal math-goal s:= sn-focus-player-number)) | |
(defrule | |
(up-compare-goal threat-player-goal >= 1) | |
(up-compare-goal threat-player-goal < 8) | |
(strategic-number sn-target-player-number g:!= threat-player-goal) | |
(strategic-number sn-target-player-number s:== sn-focus-player-number) | |
=> | |
(up-modify-sn sn-focus-player-number g:= threat-player-goal)) | |
#end-if | |
(defrule | |
(strategic-number sn-infantry-threat < 1) | |
(or | |
(or | |
(or | |
(players-unit-type-count focus-player militiaman-line > 6) | |
(players-unit-type-count focus-player eagle-warrior-line > 6) | |
) | |
(or | |
(players-unit-type-count focus-player teutonic-knight-line > 4) | |
(players-unit-type-count focus-player berserk-line > 4) | |
) | |
) | |
(or | |
(or | |
(players-unit-type-count focus-player samurai-line > 4) | |
(players-unit-type-count focus-player woad-raider-line > 4) | |
) | |
(players-unit-type-count focus-player jaguar-man-line > 4) | |
) | |
) | |
=> | |
(set-strategic-number sn-infantry-threat 1) | |
) | |
(defrule | |
(strategic-number sn-infantry-threat < 1) | |
(or | |
(players-unit-type-count focus-player huskarl-line > 6) | |
(players-unit-type-count focus-player throwing-axeman-line > 6) | |
) | |
=> | |
(set-strategic-number sn-infantry-threat 1) | |
) | |
(defrule | |
(strategic-number sn-infantry-threat < 2) | |
(or | |
(or | |
(or | |
(players-unit-type-count focus-player militiaman-line > 12) | |
(players-unit-type-count focus-player eagle-warrior-line > 12) | |
) | |
(or | |
(players-unit-type-count focus-player teutonic-knight-line > 10) | |
(players-unit-type-count focus-player berserk-line > 10) | |
) | |
) | |
(or | |
(or | |
(players-unit-type-count focus-player samurai-line > 10) | |
(players-unit-type-count focus-player woad-raider-line > 10) | |
) | |
(players-unit-type-count focus-player jaguar-man-line > 12) | |
) | |
) | |
=> | |
(set-strategic-number sn-infantry-threat 2) | |
) | |
(defrule | |
(strategic-number sn-infantry-threat < 2) | |
(or | |
(or | |
(and | |
(players-unit-type-count focus-player spearman-line > 18) | |
(unit-type-count cavalry-unit-class > 20) | |
) | |
(players-unit-type-count focus-player huskarl-line > 12) | |
) | |
(players-unit-type-count focus-player throwing-axeman-line > 12) | |
) | |
=> | |
(set-strategic-number sn-infantry-threat 2) | |
) | |
(defrule | |
(strategic-number sn-infantry-threat < 2) | |
(or | |
(or | |
(or | |
(players-unit-type-count focus-player militiaman-line > 20) | |
(players-unit-type-count focus-player eagle-warrior-line > 20) | |
) | |
(or | |
(players-unit-type-count focus-player teutonic-knight-line > 15) | |
(players-unit-type-count focus-player berserk-line > 15) | |
) | |
) | |
(or | |
(or | |
(players-unit-type-count focus-player samurai-line > 15) | |
(players-unit-type-count focus-player woad-raider-line > 15) | |
) | |
(players-unit-type-count focus-player jaguar-man-line > 15) | |
) | |
) | |
=> | |
(set-strategic-number sn-infantry-threat 3) | |
) | |
(defrule | |
(strategic-number sn-infantry-threat < 3) | |
(or | |
(or | |
(and | |
(players-unit-type-count focus-player spearman-line > 25) | |
(unit-type-count cavalry-unit-class > 20) | |
) | |
(players-unit-type-count focus-player huskarl-line > 16) | |
) | |
(players-unit-type-count focus-player throwing-axeman-line > 15) | |
) | |
=> | |
(set-strategic-number sn-infantry-threat 3) | |
) | |
(defrule | |
(strategic-number sn-infantry-threat < 3) | |
(or | |
(or | |
(or | |
(players-unit-type-count focus-player militiaman-line > 36) | |
(players-unit-type-count focus-player eagle-warrior-line > 36) | |
) | |
(or | |
(players-unit-type-count focus-player teutonic-knight-line > 24) | |
(players-unit-type-count focus-player berserk-line > 24) | |
) | |
) | |
(or | |
(or | |
(players-unit-type-count focus-player samurai-line > 24) | |
(players-unit-type-count focus-player woad-raider-line > 24) | |
) | |
(players-unit-type-count focus-player jaguar-man-line > 24) | |
) | |
) | |
=> | |
(set-strategic-number sn-infantry-threat 4) | |
) | |
(defrule | |
(strategic-number sn-infantry-threat < 4) | |
(or | |
(or | |
(and | |
(players-unit-type-count focus-player spearman-line > 46) | |
(unit-type-count cavalry-unit-class > 20) | |
) | |
(players-unit-type-count focus-player huskarl-line > 24) | |
) | |
(players-unit-type-count focus-player throwing-axeman-line > 24) | |
) | |
=> | |
(set-strategic-number sn-infantry-threat 4) | |
) | |
(defrule | |
(game-time < 1500) | |
(players-building-type-count focus-player castle > 0); early enemy castle and ranged uu civ | |
(or | |
(or | |
(players-civ focus-player briton) | |
(players-civ focus-player chinese) | |
) | |
(or | |
(or | |
(players-civ focus-player mayan) | |
(players-civ focus-player mongol) | |
) | |
(or | |
(players-civ focus-player spanish) | |
(players-civ focus-player turkish) | |
) | |
) | |
) | |
=> | |
(set-strategic-number sn-archer-threat 1) | |
) | |
(defrule | |
(or | |
(players-unit-type-count focus-player hand-cannoneer > 6) | |
(or | |
(players-unit-type-count focus-player conquistador-line > 4) | |
(players-unit-type-count focus-player janissary-line > 4) | |
) | |
) | |
=> | |
(set-strategic-number sn-archer-threat 1) | |
) | |
(defrule | |
(or | |
(or | |
(players-unit-type-count focus-player archer-line > 13) | |
(or | |
(players-unit-type-count focus-player chu-ko-nu-line > 9) | |
(players-unit-type-count focus-player longbowman-line > 9) | |
) | |
) | |
(or | |
(or | |
(players-unit-type-count focus-player plumed-archer-line > 9) | |
(players-unit-type-count focus-player mangudai-line > 9) | |
) | |
(or | |
(players-unit-type-count focus-player cavalry-archer-line > 9) | |
(players-unit-type-count focus-player war-wagon-line > 9) | |
) | |
) | |
) | |
=> | |
(set-strategic-number sn-archer-threat 2) | |
) | |
(defrule | |
(or | |
(or | |
(or | |
(players-unit-type-count focus-player elephant-archer > 9) | |
(players-unit-type-count focus-player genoese-crossbowman > 9) | |
) | |
(or | |
(players-unit-type-count focus-player hand-cannoneer > 13) | |
(and | |
(goal unit-goal archer) | |
(players-unit-type-count focus-player skirmisher-line > 15) | |
) | |
) | |
) | |
(or | |
(players-unit-type-count focus-player conquistador-line > 9) | |
(players-unit-type-count focus-player janissary-line > 9) | |
) | |
) | |
=> | |
(set-strategic-number sn-archer-threat 2) | |
) | |
(defrule | |
(or | |
(or | |
(players-unit-type-count focus-player archer-line > 25) | |
(or | |
(players-unit-type-count focus-player chu-ko-nu-line > 20) | |
(players-unit-type-count focus-player longbowman-line > 20) | |
) | |
) | |
(or | |
(or | |
(players-unit-type-count focus-player plumed-archer-line > 20) | |
(players-unit-type-count focus-player mangudai-line > 20) | |
) | |
(or | |
(players-unit-type-count focus-player cavalry-archer-line > 20) | |
(players-unit-type-count focus-player war-wagon-line > 20) | |
) | |
) | |
) | |
=> | |
(set-strategic-number sn-archer-threat 3) | |
) | |
(defrule | |
(or | |
(or | |
(players-unit-type-count focus-player genoese-crossbowman > 40) | |
(or | |
(players-unit-type-count focus-player chu-ko-nu-line > 40) | |
(players-unit-type-count focus-player longbowman-line > 40) | |
) | |
) | |
(or | |
(or | |
(players-unit-type-count focus-player plumed-archer-line > 40) | |
(players-unit-type-count focus-player mangudai-line > 40) | |
) | |
(or | |
(players-unit-type-count focus-player cavalry-archer-line > 40) | |
(players-unit-type-count focus-player war-wagon-line > 40) | |
) | |
) | |
) | |
=> | |
(set-strategic-number sn-archer-threat 4) | |
) | |
(defrule | |
(or | |
(or | |
(or | |
(players-unit-type-count focus-player magyar-huszar > 4) | |
(players-unit-type-count focus-player boyar > 4) | |
) | |
(or | |
(or | |
(players-unit-type-count focus-player knight-line > 4) | |
(players-unit-type-count focus-player scout-cavalry-line > 4) | |
) | |
(or | |
(players-unit-type-count focus-player tarkan-line > 3) | |
(players-unit-type-count focus-player war-elephant-line > 2) | |
) | |
) | |
) | |
(or | |
(players-unit-type-count focus-player camel-line > 4) | |
(players-unit-type-count focus-player cataphract-line > 4) | |
) | |
) | |
=> | |
(set-strategic-number sn-cavalry-threat 1) | |
) | |
(defrule | |
(or | |
(or | |
(or | |
(players-unit-type-count focus-player magyar-huszar > 10) | |
(players-unit-type-count focus-player boyar > 10) | |
) | |
(or | |
(or | |
(players-unit-type-count focus-player knight-line > 10) | |
(players-unit-type-count focus-player scout-cavalry-line > 10) | |
) | |
(or | |
(players-unit-type-count focus-player tarkan-line > 10) | |
(players-unit-type-count focus-player war-elephant-line > 6) | |
) | |
) | |
) | |
(or | |
(players-unit-type-count focus-player camel-line > 10) | |
(players-unit-type-count focus-player cataphract-line > 10) | |
) | |
) | |
=> | |
(set-strategic-number sn-cavalry-threat 2) | |
) | |
(defrule | |
(or | |
(or | |
(or | |
(players-unit-type-count focus-player magyar-huszar > 16) | |
(players-unit-type-count focus-player boyar > 16) | |
) | |
(or | |
(or | |
(players-unit-type-count focus-player knight-line > 16) | |
(players-unit-type-count focus-player scout-cavalry-line > 16) | |
) | |
(or | |
(players-unit-type-count focus-player tarkan-line > 16) | |
(players-unit-type-count focus-player war-elephant-line > 10) | |
) | |
) | |
) | |
(or | |
(players-unit-type-count focus-player camel-line > 16) | |
(players-unit-type-count focus-player cataphract-line > 16) | |
) | |
) | |
=> | |
(set-strategic-number sn-cavalry-threat 3) | |
) | |
(defrule | |
(or | |
(or | |
(or | |
(players-unit-type-count focus-player magyar-huszar > 26) | |
(players-unit-type-count focus-player boyar > 22) | |
) | |
(or | |
(or | |
(players-unit-type-count focus-player knight-line > 22) | |
(players-unit-type-count focus-player scout-cavalry-line > 26) | |
) | |
(or | |
(players-unit-type-count focus-player tarkan-line > 22) | |
(players-unit-type-count focus-player war-elephant-line > 15) | |
) | |
) | |
) | |
(or | |
(players-unit-type-count focus-player camel-line > 22) | |
(players-unit-type-count focus-player cataphract-line > 22) | |
) | |
) | |
=> | |
(set-strategic-number sn-cavalry-threat 4) | |
) | |
(defrule | |
(or | |
(or | |
(players-unit-type-count focus-player camel-line > 9) | |
(players-unit-type-count focus-player spearman-line > 12) | |
) | |
(or | |
(players-unit-type-count focus-player mameluke-line > 9) | |
(and | |
(game-time < 1380) | |
(players-unit-type-count focus-player spearman-line > 6) | |
) | |
) | |
) | |
=> | |
(set-goal anti-cavalry-threat-goal 1) | |
) | |
(defrule | |
(or | |
(players-unit-type-count any-enemy scout-cavalry-line > 9) | |
(or | |
(players-unit-type-count any-enemy eagle-warrior-line > 9) | |
(goal enemy-goal eagle-warrior) | |
) | |
) | |
=> | |
(set-goal anti-monk-threat-goal 1) | |
) | |
(defrule | |
(or | |
(players-unit-type-count any-enemy monk > 5) | |
(and | |
(game-time < 1500) | |
(players-building-type-count focus-player monastery > 1) | |
) | |
) | |
(or | |
(game-time < 1500) | |
(players-unit-type-count any-enemy monk > 11) | |
) | |
(or | |
(game-time < 1800) | |
(players-unit-type-count any-enemy monk > 18) | |
) | |
=> | |
(set-goal monk-threat-goal 1) | |
) | |
; Following rules help to make up for poor scouting. | |
(defrule | |
(game-time > 900) | |
(game-time < 1800) | |
(strategic-number sn-cavalry-threat == 0) | |
(or | |
(players-unit-type-count focus-player knight-line > 0) | |
(game-time < 1320) | |
) | |
(players-building-type-count focus-player stable > 0) | |
=> | |
(set-strategic-number sn-cavalry-threat 1) | |
) | |
(defrule | |
(strategic-number sn-cavalry-threat < 2) | |
(or | |
(and | |
(and | |
(game-time < 1500) | |
(players-unit-type-count focus-player knight-line > 3) | |
) | |
(or | |
(players-unit-type-count focus-player knight-line > 5) | |
(game-time < 1320) | |
) | |
) | |
(players-building-type-count focus-player stable > 1) | |
) | |
=> | |
(set-strategic-number sn-cavalry-threat 2) | |
) | |
(defrule | |
(game-time > 1020) | |
(game-time < 1260) | |
(goal strategy-goal flush) | |
(strategic-number sn-cavalry-threat == 0) | |
(players-building-type-count focus-player barracks < 1) | |
(players-building-type-count focus-player archery-range == 0) | |
(players-military-population focus-player < 2) | |
(players-building-type-count focus-player market == 0) | |
(nor | |
(players-civ focus-player aztec) | |
(players-civ focus-player mayan) | |
) | |
=> | |
(set-strategic-number sn-cavalry-threat 1) | |
) | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(strategic-number sn-cavalry-threat < 1) | |
(current-age >= castle-age) | |
(game-time < 480) | |
(nor | |
(or | |
(players-civ focus-player gothic) | |
(players-civ focus-player korean) | |
) | |
(or | |
(players-civ focus-player viking) | |
(players-civ focus-player briton) | |
) | |
) | |
(nor | |
(players-civ focus-player japanese) | |
(goal meso-enemy-goal 1) | |
) | |
=> | |
(set-strategic-number sn-cavalry-threat 1) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-archer-threat < 1) | |
(players-current-age focus-player < imperial-age) | |
(players-current-age-time focus-player < 600) | |
(players-building-type-count focus-player archery-range > 1) | |
=> | |
(set-strategic-number sn-archer-threat 1) | |
) | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
#load-if-not-defined DIFFICULTY-MODERATE | |
#load-if-not-defined DIFFICULTY-HARD | |
;(defrule | |
;(or (goal unit-goal archer) | |
; (goal strategy-goal flush)) | |
; (up-research-status c: ri-ballistics < research-pending) | |
;(or (and (strategic-number sn-cavalry-threat > 1) | |
; (players-current-age every-enemy >= castle-age)) | |
; (players-unit-type-count focus-player eagle-warrior-line > 10)) | |
;=> | |
; (set-difficulty-parameter ability-to-maintain-distance 100); stay | |
;) | |
(defrule | |
(or (or (unit-type-count fire-ship-line >= 1) | |
(unit-type-count scorpion-line >= 20)) | |
(or (unit-type-count ranged-unit-class >= 50) | |
(unit-type-count war-wagon-line >= 50))) | |
=> | |
(set-difficulty-parameter ability-to-maintain-distance 100); stay | |
) | |
(defrule | |
(unit-type-count fire-ship-line < 1) | |
(unit-type-count scorpion-line < 18) | |
(unit-type-count ranged-unit-class < 45) | |
(unit-type-count war-wagon-line < 45) | |
=> | |
(set-difficulty-parameter ability-to-dodge-missiles ability-to-dodge); 0 = dodge | |
(set-difficulty-parameter ability-to-maintain-distance ability-to-kite)); 0 = kite | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-defined UP-MULTIPLE-ENEMIES | |
(defrule ; test | |
(nor (unit-type-count castle-arrow > 0) | |
(or (unit-type-count castle-arrow-chemistry > 0) | |
(or (unit-type-count tc-arrow > 0) | |
(goal under-attack-goal 1)))) | |
=> | |
(up-jump-rule 1)) | |
(defrule | |
(strategic-number sn-target-player-number g:== threat-player-goal) | |
(strategic-number sn-target-player-number s:!= sn-focus-player-number) | |
=> | |
(up-modify-sn sn-focus-player-number s:== sn-target-player-number) | |
;jtbs (up-modify-sn sn-focus-player-number g:= math-goal) | |
) | |
#end-if | |
#end-if | |
; Scouting | |
#load-if-not-defined WONDER-RACE | |
#load-if-not-defined DEATH-MATCH | |
#load-if-not-defined SCANDANAVIA-MAP | |
(defrule | |
(strategic-number sn-minimum-civilian-explorers > 0) | |
(timer-triggered civ-explore-timer) | |
(game-time > 90) | |
(strategic-number sn-maximum-wood-drop-distance == 0) | |
=> | |
(set-strategic-number sn-maximum-wood-drop-distance -1) | |
(chat-local-to-self "Enable wood gathering.") | |
) | |
#load-if-not-defined UP-MULTIPLAYER-GAME ; bug in MP | |
(defrule | |
(game-time > 90) | |
(strategic-number sn-percent-civilian-explorers == 0) | |
(building-type-count-total mill == 0) | |
(unit-type-count villager < 11) | |
(sheep-and-forage-too-far) | |
(strategic-number sn-current-age == dark) | |
(building-type-count town-center > 0) | |
=> | |
(set-strategic-number sn-percent-civilian-builders 0) | |
(set-strategic-number sn-percent-civilian-explorers 100) | |
(set-strategic-number sn-minimum-civilian-explorers 12) | |
(set-strategic-number sn-maximum-food-drop-distance 32) | |
(set-strategic-number sn-maximum-wood-drop-distance 0) | |
(enable-timer civ-explore-timer 20) | |
(chat-local-to-self "Civ explore again.") | |
(disable-self) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(or | |
(players-building-type-count every-enemy dock == 0) | |
(and | |
(warboat-count > 7) | |
(players-building-type-count any-enemy dock == 0) | |
) | |
) | |
(warboat-count > 0) | |
(strategic-number sn-number-boat-explore-groups < 1) | |
(nand | |
(warboat-count < 6) | |
(unit-type-count revealer > 0) | |
) | |
=> | |
(set-strategic-number sn-number-boat-explore-groups 1) | |
(set-strategic-number sn-total-number-explorers 2) | |
(chat-local-to-self "Search for enemy docks.") | |
) | |
#else | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(players-building-count every-enemy == 0) | |
(goal under-attack-goal 0) | |
(warboat-count > 0) | |
=> | |
(set-strategic-number sn-number-boat-explore-groups 5) | |
(set-strategic-number sn-total-number-explorers 6) | |
) | |
(defrule | |
(strategic-number sn-number-boat-explore-groups > 1) | |
(players-building-type-count every-enemy dock > 0) | |
=> | |
(set-strategic-number sn-number-boat-explore-groups 1) | |
) | |
#end-if | |
(defrule | |
(game-time s:>= sn-home-exploration-time); 300 by default | |
(nor (map-type islands) | |
(map-type team-islands)) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(players-building-count any-enemy <= 0); every | |
(military-population >= 1) | |
; (up-compare-goal strategy-goal != boom) | |
=> | |
(chat-local-to-self "Searching for the closest enemy.") | |
(up-send-scout group-type-land-explore scouting-type) | |
(enable-timer scouting-timer 120) | |
(disable-self)) | |
(defrule | |
(timer-triggered scouting-timer) | |
(game-time < 1200) | |
(nor (map-type islands) | |
(map-type team-islands)) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(players-building-count every-enemy <= 0) | |
(military-population >= 1) | |
; (up-compare-goal strategy-goal != boom) | |
=> | |
(chat-local-to-self "Searching for the closest enemy again.") | |
(up-send-scout group-type-land-explore scouting-type) | |
(enable-timer scouting-timer 120)); 80 | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or (and (unit-type-count knight-line == 0) | |
(strategic-number sn-military-level >= 0)) | |
(game-time >= 1380)) | |
(game-time > 1140) | |
(game-time < 1800) | |
(timer-triggered scouting-timer) | |
(strategic-number sn-infantry-threat == 0) | |
(strategic-number sn-archer-threat == 0) | |
(strategic-number sn-cavalry-threat == 0) | |
(players-building-count any-enemy >= 1) | |
(players-current-age focus-player >= feudal-age) | |
(goal monk-threat-goal 0) | |
=> | |
(enable-timer scouting-timer 180) | |
; (set-strategic-number sn-percent-attack-soldiers 1) | |
; (attack-now) | |
(chat-local-to-self "Scouting the target-player.") | |
(up-send-scout group-type-land-explore scout-enemy) | |
) | |
(defrule | |
(game-time > 1500) | |
(players-building-count every-enemy > 0) | |
(or (or (strategic-number sn-infantry-threat >= 1) | |
(strategic-number sn-archer-threat >= 1)) | |
(or (strategic-number sn-cavalry-threat >= 1) | |
(goal monk-threat-goal 1))) | |
=> | |
(set-strategic-number sn-number-explore-groups 0);disable scouting when found threats to not waste units | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or (and (and | |
(strategic-number sn-infantry-threat == 0) | |
(strategic-number sn-archer-threat == 0) | |
) | |
(and | |
(strategic-number sn-cavalry-threat == 0) | |
(goal monk-threat-goal 0) | |
) | |
) | |
(players-building-count any-enemy == 0) | |
) | |
(strategic-number sn-number-explore-groups == 0) | |
=> | |
(set-strategic-number sn-number-explore-groups 1); restart scouting when no threats found | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(players-current-age any-enemy == feudal-age) | |
(players-current-age-time any-enemy > 360); enemy in feudal age for 6+ mins | |
(game-time < 1320) | |
(players-military-population any-enemy < 2); yet no military | |
(players-building-count any-enemy == 0); not all enemy sighted | |
(military-population > 10) | |
(goal position-goal pocket) | |
=> | |
(set-strategic-number sn-number-explore-groups 3); find the sling | |
(set-strategic-number sn-total-number-explorers 3) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(nor | |
(players-civ every-enemy gothic) | |
(players-civ every-enemy viking) | |
) | |
(nor | |
(players-civ every-enemy japanese) | |
(goal meso-enemy-goal 1) | |
) | |
(strategic-number sn-cavalry-threat == 0) | |
(strategic-number sn-number-explore-groups == 0) | |
=> | |
(set-strategic-number sn-number-explore-groups 1);resume exploring | |
) | |
(defrule | |
(stance-toward focus-player enemy) | |
(or (players-civ focus-player aztec) | |
(or (players-civ focus-player mayan) | |
(players-civ focus-player incan))) | |
(up-compare-goal meso-enemy-goal != 1) | |
=> | |
(set-goal meso-enemy-goal 1) | |
) | |
(defrule | |
(stance-toward focus-player enemy) | |
(nor (players-civ focus-player aztec) | |
(or (players-civ focus-player mayan) | |
(players-civ focus-player incan))) | |
(up-compare-goal meso-enemy-goal != 0) | |
=> | |
(set-goal meso-enemy-goal 0) | |
) | |
#load-if-not-defined POPULATION-CAP-25 | |
#load-if-not-defined UP-POCKET-POSITION | |
;gather information about what the enemy (mainly 1v1) is doing | |
(defrule | |
(current-age == dark-age); we have +2 villagers, so enemy feudals early?! => flush | |
(unit-type-count villager >= 22); or +3 villagers as meso as they start with either one more or free loom and save time. | |
(or | |
(players-civilian-population target-player < 21) | |
(unit-type-count villager >= 23) | |
) | |
(or | |
(players-civilian-population target-player < 22) | |
(unit-type-count villager >= 24) | |
) | |
(or | |
(players-civilian-population target-player < 23) | |
(unit-type-count villager >= 25) | |
) | |
(players-civilian-population target-player < 24) | |
=> | |
(set-goal enemy-goal flush) | |
) | |
(defrule | |
(current-age == dark-age); we have +2 villagers, so enemy feudals early?! => flush | |
(unit-type-count villager >= 26) | |
(or | |
(players-civilian-population target-player < 25) | |
(unit-type-count villager >= 27) | |
) | |
(or | |
(players-civilian-population target-player < 26) | |
(unit-type-count villager >= 28) | |
) | |
(or | |
(players-civilian-population target-player < 27) | |
(unit-type-count villager >= 29) | |
) | |
(or | |
(players-civilian-population target-player < 28) | |
(unit-type-count villager >= 30) | |
) | |
(players-civilian-population target-player < 29) | |
=> | |
(set-goal enemy-goal flush) | |
) | |
(defrule | |
(or | |
(game-time < 1020) | |
(players-military-population target-player > 11) | |
) | |
(players-current-age target-player == feudal-age) | |
(players-military-population target-player > 4) | |
=> | |
(set-goal enemy-goal flush) | |
) | |
#end-if ; <- no pocket | |
(defrule | |
(players-current-age target-player == dark-age) | |
(or (goal ffa-game-goal 1) | |
(players-civilian-population target-player >= 26)) | |
(goal enemy-goal flush) | |
=> | |
(set-goal enemy-goal 0) | |
) | |
#load-if-defined CHINESE-CIV | |
(defrule | |
(players-current-age target-player == dark-age) | |
(or (starting-resources >= medium-resources); don't false trigger flush if chinese are able to keep their villager advantage | |
(regicide-game)) | |
(goal enemy-goal flush) | |
=> | |
(set-goal enemy-goal 0) | |
) | |
#end-if | |
(defrule | |
(players-current-age target-player == castle-age) | |
(game-time < 1200) | |
(players-military-population target-player < 3); enemy fast castle without military could be rush so better be prepared | |
(nor | |
(goal enemy-goal rush) | |
(goal enemy-goal eagle-warrior) | |
) | |
=> | |
(set-goal enemy-goal rush) | |
) | |
(defrule | |
(game-time < 1260) | |
(players-current-age target-player >= castle-age) | |
(players-military-population target-player > 5) | |
(goal enemy-goal flush) | |
=> | |
(set-goal enemy-goal skirmisher) | |
(chat-to-player my-player-number "The enemy isn't flushing.") | |
) | |
(defrule | |
(game-time < 1720) | |
(or | |
(and | |
(players-current-age target-player == feudal-age) | |
(up-compare-goal enemy-goal != flush) | |
) | |
(players-unit-type-count target-player skirmisher-line > 8) | |
) | |
(players-military-population target-player >= 6) | |
=> | |
(set-goal enemy-goal skirmisher) | |
(chat-to-player my-player-number "Enemy trash-unit strategy detected.") | |
(disable-self) | |
) | |
(defrule | |
(game-time < 1500) | |
(or | |
(or | |
(players-unit-type-count target-player eagle-warrior-line > 7) | |
(and | |
(players-building-type-count target-player barracks > 2) | |
(players-unit-type-count target-player militiaman-line < 3) | |
) | |
) | |
(and | |
(game-time < 1200) | |
(and | |
(players-building-type-count target-player barracks > 1) | |
(players-military-population target-player < 2) | |
) | |
) | |
) | |
=> | |
(set-goal enemy-goal eagle-warrior) | |
(chat-to-player my-player-number "24Enemy EW rush detected.") | |
(disable-self) | |
) | |
(defrule | |
(game-time < 1500) | |
(players-unit-type-count target-player eagle-warrior-line > 4) | |
(players-current-age-time target-player < 150) | |
=> | |
(set-goal enemy-goal eagle-warrior) | |
(chat-to-player my-player-number "24Enemy EW rush detected.") | |
(disable-self) | |
) | |
(defrule | |
(game-time >= 1800) | |
(or | |
(players-unit-type-count target-player eagle-warrior-line < 5) | |
(game-time > 2400) | |
) | |
(players-unit-type-count target-player eagle-warrior-line < 20) | |
(goal enemy-goal eagle-warrior) | |
=> | |
(set-goal enemy-goal 0) | |
(disable-self) | |
) | |
#end-if | |
(defrule | |
(or | |
(or | |
(goal under-attack-goal 1) | |
(up-compare-goal patrol-goal >= 0) | |
) | |
(or | |
(and | |
(strategic-number sn-maximum-town-size >= 40) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands); TSA is not used on islands | |
) | |
(strategic-number sn-number-attack-groups > 0) | |
) | |
) | |
(building-type-count-total town-center > 0) | |
=> | |
(set-goal hostilities-goal 1) | |
) | |
;******************** STRATEGY SELECTION ******************** | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
#load-if-not-defined UP-POCKET-POSITION | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal enemy-goal flush) | |
(up-compare-goal control-goal != aggressive-rush) | |
(up-compare-goal control-goal != shot) | |
(up-compare-goal strategy-goal != sling) | |
(up-compare-goal position-goal == flank) | |
(strategic-number sn-current-age == dark); not too early, if the enemy just had idle TC and we have no food for feudal | |
(food-amount >= 430) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal default-flush-unit) | |
(set-strategic-number sn-task-ungrouped-soldiers 1); spread military to find forward towers, set back after 6 mins | |
(set-goal spread-military-goal 1) | |
(enable-timer spread-military-timer 360) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal enemy-goal flush) | |
(up-compare-goal control-goal != aggressive-rush) | |
(up-compare-goal control-goal != shot) | |
(up-compare-goal strategy-goal != sling) | |
(up-compare-goal position-goal == flank) | |
(players-current-age focus-player == feudal-age) | |
(strategic-number sn-current-age == df-transit) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal default-flush-unit) | |
(set-strategic-number sn-task-ungrouped-soldiers 1); spread military to find forward towers, set back after 5 mins | |
(set-goal spread-military-goal 1) | |
(enable-timer spread-military-timer 300) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal enemy-goal flush) | |
(current-age == dark-age) | |
(goal control-goal aggressive-rush) | |
(up-compare-goal position-goal == flank) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal default-flush-unit) | |
(set-goal control-goal 0) | |
(set-strategic-number sn-task-ungrouped-soldiers 1); spread military to find forward towers, set back after 5 mins | |
(set-goal spread-military-goal 1) | |
(enable-timer spread-military-timer 300) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal nr-map-goal -1) | |
(building-type-count stone-wall < 15); not on walled maps | |
(strategic-number sn-current-age == feudal) | |
(up-compare-goal strategy-goal != flush) | |
(up-compare-goal control-goal != shot) | |
(up-compare-goal position-goal == flank); hm | |
(building-type-count-total barracks > 0) | |
(or | |
(food-amount < 500) | |
(goal unit-goal skirmisher) | |
) | |
(players-military-population focus-player > 2) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal default-flush-unit) | |
(set-goal control-goal belated-flush-defense); change gatherer percentages to collect more wood | |
(chat-to-player my-player-number "Counter-flushing. 1") | |
) | |
#load-if-not-defined BRITON-CIV | |
#load-if-not-defined MAYAN-CIV | |
#load-if-not-defined VIKING-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count stone-wall < 15); not on walled maps | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal rush) | |
(goal enemy-goal flush) | |
(up-compare-goal position-goal == flank); hm | |
(nor | |
(or | |
(goal control-goal aggressive-rush) | |
(goal control-goal shot) | |
) | |
(goal position-goal pocket) | |
) | |
(building-type-count barracks > 0) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal default-flush-unit) | |
(set-goal control-goal belated-flush-defense); change gatherer percentages to collect more wood | |
(chat-to-player my-player-number "Counter-flushing. 2") | |
) | |
#else | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count stone-wall < 15); not on walled maps | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal rush) | |
(goal enemy-goal flush) | |
(goal position-goal flank) | |
(up-compare-goal control-goal != shot) | |
(building-type-count-total stable == 0) | |
(building-type-count barracks > 0) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal archer) | |
(set-goal control-goal belated-flush-defense); change gatherer percentages to collect more wood | |
(chat-to-player my-player-number "Counter-flushing. 3") | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-not-defined DIFFICULTY-MODERATE | |
#load-if-not-defined DIFFICULTY-HARD | |
#load-if-not-defined DIFFICULTY-HARDEST | |
;#load-if-not-defined DEATH-MATCH | |
(defrule | |
(current-age < feudal-age);(strategic-number sn-current-age == dark) | |
(goal strategy-goal flush) | |
=> | |
(set-goal strategy-goal boom); rush | |
(set-goal unit-goal default-unit) | |
(chat-local-to-self "Don't flush on easy difficulty-levels.") | |
) | |
;#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-defined DEATH-MATCH ; treat this as flush and build an army in feudal age. | |
;(defrule | |
; (strategic-number sn-current-age == df-transit) | |
;=> | |
; (set-goal enemy-goal flush) | |
; (set-goal strategy-goal flush) | |
; (set-goal unit-goal default-flush-unit) | |
; (disable-self) | |
;) | |
#else | |
#load-if-not-defined SARACEN-CIV | |
#load-if-not-defined DIFFICULTY-MODERATE | |
#load-if-not-defined DIFFICULTY-HARD | |
#load-if-not-defined DIFFICULTY-HARDEST | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(nor | |
(goal strategy-goal flush) | |
(goal strategy-goal sling) | |
) | |
(or | |
(building-type-count-total mining-camp == 0) | |
(dropsite-min-distance gold < 0) | |
) | |
(strategic-number sn-current-age == feudal) | |
(building-type-count-total market < 1) | |
(current-age-time < 10) | |
(nor | |
(town-under-attack) | |
(goal unit-goal eagle-warrior) | |
) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal no-gold-flush-unit) | |
(set-strategic-number sn-maximum-gold-drop-distance 20) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal unit-goal my-unique-unit-line) | |
(strategic-number sn-current-age == feudal) | |
(current-age-time < 10) | |
(or | |
(dropsite-min-distance stone < 0); no stone found | |
(dropsite-min-distance stone > 20); so switch strategy ; 33 | |
) | |
=> | |
(set-goal unit-goal default-ranged); should work for all civs | |
(set-goal ranged-unit-type-goal default-ranged) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or (civ-selected aztec) | |
(or (civ-selected hun) | |
(or (civ-selected incan) | |
(civ-selected persian)))) | |
(goal unit-goal my-unique-unit-line) | |
=> | |
(chat-local-to-self "Trying to find an alternate strategy: No castledrop.") | |
(set-goal unit-goal default-ranged); should work for all civs | |
(set-goal ranged-unit-type-goal default-ranged) | |
(disable-self) | |
) | |
(defrule | |
(or (and (player-in-game any-human-enemy) | |
(or (or (map-type black-forest) | |
(cc-players-unit-type-count 0 tree-class > heavy-wood)) | |
(or (map-type mongolia) | |
(map-type oasis)))) | |
(building-type-count stone-wall-line > 15)) | |
=> | |
(set-goal nr-map-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(taunt-detected any-ally 38) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 38) | |
(acknowledge-taunt this-any-ally 33) | |
(chat-to-allies "1") | |
(chat-to-allies-using-id 7110); "Yes." | |
) | |
(defrule | |
(or (taunt-detected any-ally 32) | |
(taunt-detected any-ally 33)) | |
(or (goal strategy-goal sling) | |
(goal control-goal shot)) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(acknowledge-taunt this-any-ally 33) | |
(chat-to-allies "2") | |
(chat-to-allies-using-id 7111); "No." | |
) | |
; *** STRATEGY DEPENDING ON CIV *** | |
#load-if-defined AZTEC-CIV | |
#load-if-not-defined ARABIA-MAP | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(game-time > 13) | |
(game-time < 60) | |
(random-number <= 20) | |
(or (goal position-goal pocket) | |
(or (map-size giant) | |
(map-size ludikris))) | |
;(nand (goal position-goal flank) | |
; (or (map-size large) | |
; (or (map-size giant) | |
; (map-size ludikris)))) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal archer) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(game-time < 1500) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(goal unit-goal archer) | |
(goal strategy-goal boom) | |
(up-compare-goal position-goal == flank) | |
(strategic-number sn-military-level < 0) | |
(building-type-count-total town-center > tc-level-one) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
#else | |
#load-if-not-defined UP-POCKET-POSITION | |
#load-if-defined LOW-RESOURCES-START | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(game-time > 13) | |
(game-time < 60) | |
(random-number <= 20) | |
(up-compare-goal position-goal == flank) | |
(up-compare-goal control-goal != shot) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal archer) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(or | |
(nand | |
(goal meso-enemy-goal 1) | |
(goal position-goal flank) | |
) | |
(goal nr-map-goal 1) | |
) | |
(random-number > 20) | |
(random-number <= 40) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal monk) | |
(set-goal ranged-unit-type-goal monk) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(random-number <= 20) | |
(random-number > 86) | |
) | |
(goal position-goal pocket) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal archer) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(goal ffa-game-goal -1) | |
(goal nr-map-goal -1) | |
(strategic-number sn-current-age <= fc-transit) | |
(nor | |
(players-civ any-ally briton); don't play with too much ranged | |
(players-civ any-ally mayan) | |
) | |
(random-number >= 70) | |
(game-time < 60) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal archer) | |
(set-goal control-goal aggressive-rush) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(or | |
(and | |
(goal strategy-goal boom) | |
(or | |
(goal unit-goal archer) | |
(goal unit-goal eagle-warrior) | |
) | |
) | |
(goal unit-goal skirmisher) | |
) | |
(building-type-count-total town-center >= tc-level-three) | |
(or | |
(building-type-count-total town-center >= tc-level-four) | |
(goal unit-goal eagle-warrior) | |
) | |
=> | |
(set-goal strategy-goal fast-imp) | |
) | |
(defrule | |
(or | |
(or | |
(players-unit-type-count focus-player huskarl-line > 15) | |
(players-unit-type-count focus-player samurai-line > 15) | |
) | |
(or | |
(and | |
(strategic-number sn-cavalry-threat > 3) | |
(goal anti-monk-threat-goal 0) | |
) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
) | |
) | |
=> | |
(set-goal ranged-unit-type-goal monk) | |
(disable-self) | |
) | |
(defrule | |
(goal unit-goal monk) | |
(or | |
(and | |
(building-type-count-total barracks > 0) | |
(building-type-count-total monastery < 2) | |
) | |
(up-research-status c: ri-long-swordsman >= research-pending) | |
) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal eagle-warrior) | |
) | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
(or | |
(or | |
(goal strategy-goal boom) | |
(goal strategy-goal fast-imp) | |
) | |
(and | |
(goal unit-goal skirmisher) | |
(goal ranged-unit-type-goal archer) | |
) | |
) | |
(up-compare-goal unit-goal != monk) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal eagle-warrior) | |
) | |
(defrule | |
(strategic-number sn-current-age < ci-transit) | |
(goal unit-goal eagle-warrior) | |
(goal strategy-goal rush) | |
(or | |
(military-population > 60) | |
(unit-type-count-total eagle-warrior-line > 45) | |
) | |
=> | |
(set-goal unit-goal eagle-warrior) | |
(set-goal strategy-goal fast-imp) | |
(set-goal ranged-unit-type-goal 0) | |
) | |
(defrule | |
(goal unit-goal eagle-warrior) | |
(goal strategy-goal rush) | |
(or | |
(players-building-type-count focus-player castle > 0) | |
(or | |
(players-unit-type-count focus-player teutonic-knight-line > 0) | |
(players-unit-type-count focus-player cataphract-line > 0) | |
) | |
) | |
(game-time < 1500) | |
=> | |
(set-goal unit-goal eagle-warrior) | |
(set-goal strategy-goal fast-imp) | |
(set-goal ranged-unit-type-goal monk) | |
) | |
#load-if-defined UP-1-PLAYER-TEAM | |
(defrule | |
(nor | |
(goal control-goal my-unique-unit-line) | |
(goal unit-goal my-unique-unit-line) | |
) | |
(civilian-population > 90) | |
(or | |
(and | |
(strategic-number sn-current-age >= ci-transit) | |
(game-time > 3000) | |
) | |
(and | |
(food-amount > 400) | |
(gold-amount < 100) | |
) | |
) | |
(current-age-time > 300) | |
=> | |
(set-goal control-goal militiaman-line) | |
(chat-to-player my-player-number "Trying to research m@a and LSM.") | |
(disable-self) | |
) | |
#end-if | |
(defrule | |
(game-time < 2100) | |
(players-current-age focus-player == imperial-age) | |
(or | |
(goal unit-goal mix) | |
(goal unit-goal eagle-warrior) | |
) | |
(players-unit-type-count focus-player eagle-warrior-line > 5) | |
=> | |
(set-goal control-goal militiaman-line) | |
(chat-to-player my-player-number "Trying to research m@a and LSM.") | |
(disable-self) | |
) | |
(defrule | |
(food-amount > 150) | |
(or | |
(gold-amount < 50) | |
(food-amount > 300) | |
) | |
(or | |
(and | |
(up-research-status c: ri-iron-casting >= research-pending) | |
(and | |
(goal unit-goal eagle-warrior) | |
(goal enemy-goal eagle-warrior) | |
) | |
) | |
(and | |
(goal unit-goal monk) | |
(players-unit-type-count focus-player eagle-warrior-line > 7) | |
) | |
) | |
=> | |
(set-goal control-goal militiaman-line) | |
(chat-to-player my-player-number "Going for long-swordsmen to counter an EW rush.") | |
(disable-self) | |
) | |
#load-if-not-defined RIVERS-MAP | |
#load-if-not-defined BALTIC-MAP | |
(defrule | |
(or | |
(and | |
(strategic-number sn-current-age >= ci-transit) | |
(and | |
(goal control-goal militiaman-line) | |
(up-research-status c: ri-long-swordsman >= research-pending) | |
) | |
) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
) | |
(nand | |
(unit-type-count-total eagle-warrior-line > 20); go for eew instead as some enemy still may have ranged units | |
(strategic-number sn-archer-threat > 0) | |
) | |
=> | |
(set-goal unit-goal militiaman-line) | |
(disable-self) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(up-compare-goal control-goal != shot) | |
(strategic-number sn-infantry-threat >= 3) | |
(players-unit-type-count every-enemy samurai-line < 20) | |
(nand | |
(players-unit-type-count focus-player eagle-warrior-line > 20) | |
(goal control-goal militiaman-line) | |
) | |
(dropsite-min-distance stone < 5) | |
(building-type-count-total town-center >= tc-level-two) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(building-type-count castle > 1) | |
(goal control-goal my-unique-unit-line) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed) | |
(or (map-type baltic) | |
(map-type rivers)) | |
(current-age < castle-age) | |
(goal unit-goal eagle-warrior) | |
(players-unit-type-count any-enemy galley-line > 0) | |
=> | |
(set-strategic-number sn-minimum-water-body-size-for-dock water-islands) | |
(set-goal strategy-goal rush) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(or | |
(map-type baltic) | |
(map-type rivers) | |
) | |
(goal unit-goal eagle-warrior) | |
(or | |
(goal enemy-boats-goal 0) | |
(warboat-count > 40) | |
) | |
=> | |
(set-strategic-number sn-minimum-water-body-size-for-dock water-mixed) | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal eagle-warrior) | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(strategic-number sn-current-age >= fc-transit) | |
(or | |
(players-building-type-count focus-player watch-tower > 3) | |
(and | |
(and | |
(players-unit-type-count focus-player skirmisher-line > 7) | |
(players-unit-type-count focus-player militiaman-line < 5) | |
) | |
(or | |
(players-unit-type-count focus-player skirmisher-line > 15) | |
(game-time < 1500) | |
) | |
) | |
) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal eagle-warrior) | |
(disable-self) | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(goal unit-goal archer) | |
(strategic-number sn-current-age == fc-transit) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal archer) | |
(set-goal control-goal aggressive-rush) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal strategy-goal boom) | |
(set-goal control-goal 0) | |
(set-goal unit-goal eagle-warrior) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if ; AZTEC CIV STRATEGY | |
#load-if-defined BRITON-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(or | |
(or | |
(random-number <= 20) | |
(regicide-game) | |
) | |
(goal nr-map-goal 1) | |
) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
#load-if-defined UP-POCKET-POSITION | |
(defrule | |
(random-number > 80) | |
(game-time > 15) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal knight) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(up-compare-goal control-goal != my-unique-unit-line) | |
(unit-type-count villager > fourty-percent-pop) | |
(dropsite-min-distance stone < 5) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(set-goal ranged-unit-type-goal 0) | |
(chat-to-player my-player-number "Switching to unique units.") | |
) | |
(defrule | |
(building-type-count castle > 1) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(set-goal uu-up-goal 1) | |
(set-goal ranged-unit-type-goal 0) | |
) | |
#end-if | |
(defrule | |
(random-number >= 60) | |
(game-time < 60) | |
(goal nr-map-goal -1) | |
=> | |
(set-goal unit-goal archer) | |
(set-goal strategy-goal rush) | |
(disable-self) | |
) | |
(defrule | |
(up-compare-goal control-goal != shot) | |
(or | |
(and | |
(goal strategy-goal flush) | |
(building-type-count-total town-center >= tc-level-three) | |
) | |
(and | |
(building-type-count castle > 0) | |
(goal unit-goal archer) | |
) | |
) | |
=> | |
(set-goal unit-goal mix) | |
(set-goal control-goal my-unique-unit-line) | |
(disable-self) | |
) | |
(defrule | |
(research-available ri-man-at-arms) | |
(or | |
(or | |
(players-unit-type-count focus-player eagle-warrior-line > 14) | |
(players-unit-type-count focus-player huskarl-line > 20) | |
) | |
(goal enemy-goal eagle-warrior) | |
) | |
=> | |
(set-goal control-goal militiaman-line) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if ; BRITON STRATEGY | |
#load-if-defined BYZANTINE-CIV | |
(defrule | |
(goal unit-goal skirmisher) | |
(goal meso-enemy-goal 1) | |
(or | |
(goal enemy-goal eagle-warrior) | |
(and | |
(and | |
(game-time < 1200) | |
(players-building-type-count focus-player barracks > 0) | |
) | |
(or | |
(players-building-type-count focus-player barracks > 1) | |
(players-building-type-count focus-player market > 0) | |
) | |
) | |
) | |
(building-type-count castle == 0) | |
=> | |
(set-goal unit-goal mix) | |
(disable-self) | |
) | |
(defrule | |
(building-type-count castle > 1) | |
(up-compare-goal unit-goal != my-unique-unit-line) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(chat-to-player my-player-number "Switching to unique units.") | |
(disable-self) | |
) | |
(defrule | |
(random-number > 80) | |
(strategic-number sn-current-age == df-transit) | |
(building-type-count-total archery-range == 0) | |
(goal strategy-goal rush) | |
(up-compare-goal enemy-goal != flush) | |
(or | |
(or | |
(players-civ focus-player hun) | |
(players-civ focus-player mongol) | |
) | |
(or | |
(players-civ focus-player persian) | |
(players-civ focus-player frankish) | |
) | |
) | |
=> | |
(set-goal unit-goal knight) | |
) | |
(defrule | |
(or (building-type-count castle > 0) | |
(goal nr-map-goal 1)) | |
(random-number >= 60) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
#load-if-defined UP-POCKET-POSITION | |
(defrule | |
(dropsite-min-distance stone < 5) | |
(building-type-count-total town-center >= tc-level-four) | |
(up-compare-goal unit-goal != my-unique-unit-line) | |
(up-compare-goal control-goal != my-unique-unit-line) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(chat-to-player my-player-number "Preparing in order to train unique units later on.") | |
(disable-self) | |
) | |
(defrule | |
(random-number >= 60) | |
(game-time > 12) | |
(game-time < 60) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal archer) | |
(set-goal control-goal 0) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
#else | |
(defrule | |
(dropsite-min-distance stone < 5) | |
(building-type-count-total town-center >= tc-level-three) | |
(up-compare-goal unit-goal != my-unique-unit-line) | |
(up-compare-goal control-goal != my-unique-unit-line) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(chat-to-player my-player-number "Preparing in order to train unique units later on.") | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal position-goal == flank); hm | |
(up-compare-goal strategy-goal != flush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal flush) | |
(set-goal control-goal 0) | |
(set-goal unit-goal skirmisher) | |
(chat-to-allies-using-id 22155) | |
) | |
#load-if-defined ARABIA-MAP | |
#load-if-defined DIFFICULTY-HARDEST | |
#load-if-defined LOW-RESOURCES-START | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(strategic-number sn-current-age == dark) | |
(goal strategy-goal rush) | |
(unit-type-count-total villager < 27) | |
(food-amount > 420) | |
(up-compare-goal control-goal != shot) | |
(up-compare-goal position-goal == flank) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal skirmisher) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if | |
#load-if-defined CELTIC-CIV | |
(defrule | |
(goal unit-goal militiaman-line) | |
(or | |
(strategic-number sn-current-age == fc-transit) | |
(research-available ri-long-swordsman) | |
) | |
(players-unit-type-count focus-player eagle-warrior-line < 5) | |
=> | |
(set-goal unit-goal skirmisher) | |
(set-goal control-goal 0) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(random-number < 25) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(disable-self) | |
) | |
(defrule | |
(or | |
(and | |
(goal unit-goal knight) | |
(game-time > 1800) | |
) | |
(and | |
(goal unit-goal scorpion) | |
(building-type-count town-center >= tc-level-four) | |
) | |
) | |
(dropsite-min-distance stone < 6) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(disable-self) | |
) | |
(defrule | |
(or | |
(goal unit-goal knight) | |
(or | |
(goal unit-goal scorpion) | |
(goal unit-goal archer) | |
) | |
) | |
(building-type-count castle > 0) | |
(or | |
(building-type-count castle > 1) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(set-goal control-goal 0) | |
) | |
(defrule | |
(goal nr-map-goal -1) | |
(current-age == dark-age) | |
(random-number > 80) | |
(game-time > 25) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal knight) | |
(set-goal strategy-goal rush) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
#load-if-defined UP-4-PLAYER-TEAM | |
(defrule | |
(goal nr-map-goal -1) | |
(building-type-count stone-wall < 10) | |
(goal unit-goal knight) | |
(goal strategy-goal boom) | |
=> | |
(set-goal unit-goal archer) | |
(set-goal ranged-unit-type-goal archer) | |
(disable-self) | |
) | |
(defrule | |
(goal unit-goal archer) | |
(building-type-count-total town-center >= tc-level-four) | |
(strategic-number sn-current-age >= ci-transit) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal scorpion) | |
(set-goal ranged-unit-type-goal scorpion) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
#end-if | |
(defrule | |
(current-age == dark-age) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(random-number > 80) | |
(goal nr-map-goal 1) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(goal nr-map-goal 1) | |
(and | |
(goal position-goal pocket) | |
(random-number > 50) | |
) | |
) | |
(random-number <= 80) | |
(game-time > 25) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal scorpion) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != boom) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal scorpion) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if | |
#load-if-defined CHINESE-CIV | |
(defrule | |
(nor | |
(goal unit-goal knight) | |
(goal unit-goal my-unique-unit-line) | |
) | |
(or | |
(and | |
(goal strategy-goal flush) | |
(strategic-number sn-current-age == fc-transit) | |
) | |
(and | |
(goal unit-goal archer) | |
(goal forward-threat-goal 1) | |
) | |
) | |
=> | |
(set-goal unit-goal knight) | |
(chat-to-player my-player-number "Switching to knights.") | |
) | |
(defrule | |
(goal unit-goal knight) | |
(goal strategy-goal rush) | |
(strategic-number sn-current-age == fc-transit) | |
(goal ranged-unit-type-goal archer) | |
(up-research-status c: ri-bloodlines >= research-pending) | |
=> | |
(set-goal ranged-unit-type-goal cavalry-archer) | |
(disable-self) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(up-compare-goal control-goal != shot) | |
(up-compare-goal control-goal != my-unique-unit-line) | |
(or | |
(and | |
(building-type-count-total archery-range > 0) | |
(building-type-count-total town-center >= tc-level-three) | |
) | |
(unit-type-count villager > fourty-percent-pop) | |
) | |
(dropsite-min-distance stone < 5) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(chat-to-player my-player-number "Switching to unique units.") | |
) | |
#load-if-defined UP-1-PLAYER-TEAM | |
#load-if-not-defined UP-TURKISH-CIV-ENEMY | |
#load-if-not-defined UP-SARACEN-CIV-ENEMY | |
(defrule | |
(goal unit-goal knight) | |
(goal control-goal my-unique-unit-line) | |
(goal anti-cavalry-threat-goal 1) | |
(civilian-population > 80) | |
(building-type-count castle > 0) | |
=> | |
(set-goal unit-goal militiaman-line) | |
(disable-self) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#load-if-defined ARABIA-MAP | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(goal strategy-goal rush) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(building-type-count castle > 0) | |
(random-number < 50) | |
) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
#else | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(or | |
(goal nr-map-goal 1) | |
(building-type-count castle > 0) | |
) | |
(random-number < 30) | |
) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(goal nr-map-goal 1) | |
(random-number > 60) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal knight) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(goal nr-map-goal -1) | |
(building-type-count-total castle == 0) | |
(random-number > 80) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal archer) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if | |
#load-if-defined FRANKISH-CIV | |
(defrule | |
(goal unit-goal knight) | |
(players-unit-type-count focus-player camel-line > 10) | |
(dropsite-min-distance stone < 5) | |
(game-time >= 1800) | |
(research-available ri-man-at-arms) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
) | |
(defrule | |
(goal control-goal my-unique-unit-line) | |
(players-unit-type-count focus-player camel-line > 10) | |
(building-type-count-total castle > 0) | |
(research-available ri-man-at-arms) | |
(or | |
(building-type-count-total castle > 1) | |
(strategic-number sn-archer-threat < 2) | |
) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(up-compare-goal control-goal != shot) | |
(goal anti-cavalry-threat-goal 1) | |
(or | |
(strategic-number sn-current-age >= ci-transit) | |
(and | |
(food-amount > 400) | |
(gold-amount < 100) | |
) | |
) | |
(research-available ri-man-at-arms) | |
(up-research-status c: ri-hand-cart >= research-pending) | |
(building-type-count-total castle > 0) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
) | |
#load-if-defined UP-1-PLAYER-TEAM | |
#load-if-not-defined UP-TURKISH-CIV-ENEMY | |
#load-if-not-defined UP-SARACEN-CIV-ENEMY | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-military-level < 0) | |
(goal anti-cavalry-threat-goal 1) | |
(building-type-count-total castle == 0) | |
(up-research-status c: ri-hand-cart >= research-pending) | |
=> | |
(set-goal control-goal militiaman-line) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(up-compare-goal strategy-goal != boom) | |
(up-compare-goal control-goal != shot) | |
(up-compare-goal ranged-unit-type-goal != scorpion) | |
(goal anti-cavalry-threat-goal 1) | |
(building-type-count-total castle == 0) | |
(or | |
(strategic-number sn-current-age >= ci-transit) | |
(and | |
(food-amount > 400) | |
(gold-amount < 100) | |
) | |
) | |
(up-research-status c: ri-hand-cart >= research-pending) | |
=> | |
(set-goal control-goal militiaman-line) | |
) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(goal unit-goal knight) | |
(goal control-goal militiaman-line) | |
(players-unit-type-count focus-player spearman-line > 30) | |
(strategic-number sn-archer-threat < 2) | |
(up-research-status c: ri-long-swordsman >= research-pending) | |
(building-type-count-total barracks >= 3) | |
(up-compare-goal ranged-unit-type-goal != scorpion) | |
=> | |
(set-goal unit-goal militiaman-line) | |
(chat-to-player my-player-number "switching to militiaman-line.") | |
) | |
(defrule | |
(goal unit-goal militiaman-line) | |
(players-unit-type-count every-enemy spearman-line < 20) | |
(gold-amount > 500) | |
(strategic-number sn-current-age >= ci-transit) | |
=> | |
(set-goal unit-goal knight) | |
(chat-to-player my-player-number "Switching to knight-line.") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total stone-wall > 15) | |
(game-time > 13) | |
(game-time < 60) | |
(random-number > 40) | |
(or | |
(players-civ focus-player aztec) | |
(players-civ focus-player saracen) | |
) | |
=> | |
(set-goal control-goal aggressive-rush) | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal scout-cavalry) | |
(disable-self) | |
) | |
(defrule | |
(current-age == castle-age) | |
(goal unit-goal scout-cavalry) | |
=> | |
(set-goal unit-goal knight) | |
(disable-self) | |
) | |
#load-if-defined UP-POCKET-POSITION | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(game-time > 13) | |
(game-time < 60) | |
(or | |
(and | |
(random-number > 50) | |
(or | |
(random-number > 70) | |
(goal nr-map-goal 1) | |
) | |
) | |
(building-type-count-total stone-wall >= 15) | |
) | |
=> | |
(set-goal control-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal knight) | |
(set-goal ranged-unit-type-goal scorpion) | |
(disable-self) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != rush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal unit-goal knight) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal scorpion) | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal knight) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if ;french | |
#load-if-defined GOTHIC-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-archer-threat >= 1) | |
(up-research-status c: ri-champion < research-pending) | |
(can-research my-unique-research) | |
=> | |
(research my-unique-research) | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(chat-to-player my-player-number "Switching to husks.") | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(dropsite-min-distance stone < 6) | |
(building-type-count-total town-center >= tc-level-three) | |
(or | |
(or | |
(players-civ focus-player briton) | |
(players-civ focus-player hun) | |
) | |
(or | |
(or | |
(players-civ focus-player mongol) | |
(players-civ focus-player mayan) | |
) | |
(and | |
(current-age == imperial-age) | |
(goal unit-goal skirmisher) | |
) | |
) | |
) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
) | |
(defrule | |
(up-compare-goal control-goal != militiaman-line) | |
(or | |
(or | |
(players-unit-type-count focus-player eagle-warrior-line > 10) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(and | |
(and | |
(food-amount > 500) | |
(gold-amount < 100) | |
) | |
(goal unit-goal knight) | |
) | |
) | |
=> | |
(set-goal control-goal militiaman-line) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(up-research-status c: ri-long-swordsman >= research-pending) | |
=> | |
(set-goal unit-goal militiaman-line) | |
(set-goal control-goal 0) | |
) | |
(defrule | |
(or | |
(random-number >= 80) | |
(or | |
(goal nr-map-goal 1) | |
(building-type-count castle > 0) | |
) | |
) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(set-goal ranged-unit-type-goal 0) | |
(disable-self) | |
) | |
#load-if-defined UP-POCKET-POSITION | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal unit-goal knight) | |
(set-goal ranged-unit-type-goal 0) | |
(chat-to-allies-using-id 22155) | |
) | |
#else | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(up-compare-goal position-goal == flank); hm | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal militiaman-line) | |
(set-goal ranged-unit-type-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal scorpion) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if | |
#load-if-defined HUN-CIV | |
(defrule | |
(current-age >= castle-age) | |
(building-type-count archery-range >= 2) | |
(nor | |
(or | |
(goal unit-goal cavalry-archer) | |
(goal control-goal shot) | |
) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
) | |
=> | |
(set-goal unit-goal cavalry-archer) | |
(set-goal control-goal 0) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(building-type-count-total stone-wall < 15) | |
(random-number > 60) | |
(or | |
(goal nr-map-goal 1) | |
(goal position-goal pocket) | |
) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal cavalry-archer) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
#load-if-not-defined UP-GAME-AGE2-X2 | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(goal ffa-game-goal -1) | |
(goal nr-map-goal -1) | |
(building-type-count-total stone-wall < 15) | |
(random-number > 60) | |
(or | |
(player-in-game any-ally) | |
(random-number > 80) | |
) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal control-goal aggressive-rush) | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal cavalry-archer) | |
(disable-self) | |
) | |
#else | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(goal ffa-game-goal -1) | |
(goal nr-map-goal -1) | |
(building-type-count-total stone-wall < 15) | |
(random-number > 60) | |
(up-compare-goal position-goal == flank) | |
(or | |
(player-in-game any-ally) | |
(random-number > 80) | |
) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal control-goal aggressive-rush) | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal scout-cavalry) | |
(disable-self) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal unit-goal cavalry-archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal knight) | |
(chat-to-allies-using-id 22156) | |
) | |
#load-if-defined UP-POCKET-POSITION | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(game-time > 13) | |
(game-time < 60) | |
(building-type-count-total stone-wall >= 15) | |
=> | |
(set-goal control-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal knight) | |
(disable-self) | |
) | |
#else | |
#load-if-defined ARABIA-MAP | |
#load-if-defined DIFFICULTY-HARDEST | |
#load-if-defined LOW-RESOURCES-START | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(strategic-number sn-current-age == dark) | |
(up-compare-goal control-goal != shot) | |
(up-compare-goal position-goal == flank) | |
(goal strategy-goal rush) | |
(unit-type-count-total villager < 26) | |
(food-amount > 420) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal skirmisher) | |
(set-goal control-goal aggressive-rush) | |
(disable-self) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-defined JAPANESE-CIV | |
(defrule | |
(strategic-number sn-current-age >= castle) | |
(or | |
(goal strategy-goal boom) | |
(or | |
(goal unit-goal knight) | |
(goal unit-goal skirmisher) | |
) | |
) | |
(building-type-count-total town-center >= tc-level-four) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
) | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(up-research-status c: ri-long-swordsman < research-pending) | |
(unit-type-count-total militiaman-line < 10) | |
(goal strategy-goal flush) | |
=> | |
(set-goal unit-goal skirmisher) | |
(set-goal control-goal my-unique-unit-line) | |
) | |
(defrule | |
(or | |
(goal unit-goal skirmisher) | |
(and | |
(goal unit-goal knight) | |
(building-type-count-total castle > 1) | |
) | |
) | |
(building-type-count castle > 0) | |
(up-research-status c: ri-long-swordsman < research-pending) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
) | |
#load-if-defined UP-1-PLAYER-TEAM | |
(defrule | |
(current-age == dark-age) | |
(or | |
(or | |
(and | |
(goal ffa-game-goal 1) | |
(random-number > 50) | |
) | |
(building-type-count castle > 0) | |
) | |
(and | |
(random-number >= 80) | |
(goal nr-map-goal 1) | |
) | |
) | |
(game-time > 12) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(current-age == dark-age) | |
(goal meso-enemy-goal 1) | |
(random-number >= 90) | |
(game-time > 12) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal 0) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(goal meso-enemy-goal -1) | |
(random-number < 8) | |
(game-time > 15) | |
(game-time < 60) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal monk) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal monk) | |
(disable-self) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(goal strategy-goal flush) | |
(goal nr-map-goal 1) | |
=> | |
(set-goal unit-goal archer) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal strategy-goal boom) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(goal strategy-goal flush) | |
(unit-type-count villager > 27) | |
(strategic-number sn-current-age == dark) | |
=> | |
(set-goal unit-goal archer) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal strategy-goal rush) | |
(disable-self) | |
) | |
#load-if-defined UP-POCKET-POSITION | |
#load-if-defined UP-GAME-AGE2-X2 | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal unit-goal knight) | |
(set-goal ranged-unit-type-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
#else | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal unit-goal archer) | |
(set-goal ranged-unit-type-goal archer) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if | |
#else | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal position-goal == flank); hm | |
(up-compare-goal strategy-goal != flush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal archer) | |
(set-goal ranged-unit-type-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != boom) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if | |
#load-if-defined KOREAN-CIV | |
(defrule | |
(goal strategy-goal flush) | |
=> | |
(set-goal unit-goal skirmisher) | |
(set-goal ranged-unit-type-goal archer) | |
(disable-self) | |
) | |
(defrule | |
(dropsite-min-distance stone < 5) | |
(building-type-count-total town-center >= tc-level-three) | |
(not (goal unit-goal my-unique-unit-line)) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(chat-to-player my-player-number "Preparing in order to train unique units later on.") | |
(disable-self) | |
) | |
(defrule | |
(building-type-count castle > 1) | |
(goal unit-goal militiaman-line) | |
(goal control-goal my-unique-unit-line) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal militiaman-line) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(building-type-count castle > 1) | |
(nor | |
(goal unit-goal militiaman-line) | |
(goal unit-goal my-unique-unit-line) | |
) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(current-age == dark-age) | |
(random-number > 25) | |
(random-number < 60) | |
(up-compare-goal position-goal == flank); hm | |
(goal nr-map-goal -1) | |
=> | |
(set-goal unit-goal skirmisher) | |
(set-goal strategy-goal flush) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(or | |
(and | |
(or | |
(random-number >= 60) | |
(players-civ every-enemy aztec) | |
) | |
(random-number > 40) | |
) | |
(building-type-count castle > 0) | |
) | |
(game-time < 60) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(goal nr-map-goal 1) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if | |
#load-if-defined MAYAN-CIV | |
(defrule | |
(or | |
(and | |
(or | |
(up-research-status c: ri-heresy >= research-pending) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(or | |
(goal strategy-goal boom) | |
(goal strategy-goal fast-imp) | |
) | |
) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal eagle-warrior) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(goal unit-goal eagle-warrior) | |
(or | |
(players-civ focus-player gothic) | |
(players-civ focus-player japanese) | |
) | |
(up-compare-goal control-goal != shot) | |
(up-compare-goal position-goal == flank); hm | |
(goal nr-map-goal -1) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal default-flush-unit) | |
(disable-self) | |
) | |
(defrule | |
(current-age == dark-age) | |
(random-number < 50) | |
(up-compare-goal position-goal == flank); hm | |
(goal nr-map-goal -1) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal default-flush-unit) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal nr-map-goal 1) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(random-number >= 50) | |
(game-time < 60) | |
(goal ffa-game-goal -1) | |
(building-type-count-total castle == 0) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal archer) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(disable-self) | |
) | |
(defrule | |
(dropsite-min-distance stone < 5) | |
(building-type-count-total town-center >= tc-level-three) | |
(nor | |
(goal unit-goal my-unique-unit-line) | |
(or | |
(goal control-goal shot) | |
(goal control-goal aggressive-rush) | |
) | |
) | |
(or | |
(not (goal unit-goal eagle-warrior)) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(chat-to-player my-player-number "Preparing in order to train unique units later on.") | |
(disable-self) | |
) | |
(defrule | |
(or (building-type-count castle > 1) | |
(regicide-game)) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(chat-to-player my-player-number "Switching to unique units.") | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed) | |
(or (map-type baltic) | |
(map-type rivers)) | |
(current-age < castle-age) | |
(goal unit-goal eagle-warrior) | |
(players-unit-type-count any-enemy galley-line > 0) | |
=> | |
(set-strategic-number sn-minimum-water-body-size-for-dock water-islands) | |
(set-goal strategy-goal rush) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(or (map-type baltic) | |
(map-type rivers)) | |
(goal unit-goal eagle-warrior) | |
(or (goal enemy-boats-goal 0) | |
(warboat-count > 40)) | |
=> | |
(set-strategic-number sn-minimum-water-body-size-for-dock water-mixed) | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal eagle-warrior) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(current-age < castle-age) | |
(goal unit-goal my-unique-unit-line) | |
(building-type-count-total castle == 0) | |
=> | |
(set-goal unit-goal eagle-warrior) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(up-compare-goal strategy-goal != rush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if | |
#load-if-defined MONGOL-CIV | |
(defrule | |
(current-age == dark-age) | |
(game-time > 30) | |
(goal strategy-goal flush) | |
(random-number >= 40) | |
=> | |
(set-goal unit-goal default-flush-unit) | |
(disable-self) | |
) | |
(defrule | |
(current-age == dark-age) | |
(game-time > 30) | |
(goal strategy-goal flush) | |
(random-number < 40) | |
=> | |
(set-goal unit-goal skirmisher) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(goal strategy-goal flush) | |
=> | |
(set-goal unit-goal knight) | |
(chat-to-player my-player-number "Switching to knights.") | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(unit-type-count archer-line > 12) | |
=> | |
(set-goal ranged-unit-type-goal archer) | |
(disable-self) | |
) | |
(defrule | |
(or | |
(goal unit-goal knight) | |
(goal unit-goal skirmisher) | |
) | |
(up-compare-goal control-goal != my-unique-unit-line) | |
(unit-type-count villager > fourty-percent-pop) | |
(dropsite-min-distance stone < 5) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(chat-to-player my-player-number "Switching to unique units.") | |
) | |
(defrule | |
(or (up-research-status c: my-unique-unit-upgrade >= research-pending) | |
(building-type-count castle >= 3)) | |
(up-compare-goal control-goal != my-unique-unit-line) | |
(building-type-count castle >= 1) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(chat-to-player my-player-number "Switching to unique units."); test | |
) | |
#load-if-not-defined UP-TURKISH-CIV-ENEMY | |
#load-if-not-defined UP-SARACEN-CIV-ENEMY | |
(defrule | |
(goal unit-goal knight) | |
(goal control-goal my-unique-unit-line) | |
(or | |
(players-unit-type-count focus-player spearman-line > 20) | |
(players-unit-type-count focus-player camel-line > 12) | |
) | |
(unit-type-count villager > fourty-percent-pop) | |
(building-type-count castle > 0) | |
=> | |
(set-goal unit-goal militiaman-line) | |
(disable-self) | |
) | |
(defrule | |
(building-type-count castle > 2) | |
(or | |
(goal unit-goal militiaman-line) | |
(goal control-goal militiaman-line) | |
) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal militiaman-line) | |
(disable-self) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager > 27) | |
(goal strategy-goal flush) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(goal nr-map-goal 1) | |
(random-number >= 90) | |
) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal nr-map-goal 1) | |
(random-number >= 70) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal knight) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(up-compare-goal strategy-goal != rush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal cavalry-archer) | |
(set-goal unit-goal cavalry-archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if; mongol | |
#load-if-defined PERSIAN-CIV | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(goal strategy-goal flush) | |
=> | |
(set-goal unit-goal knight) | |
(chat-to-player my-player-number "Switching to knights.") | |
(disable-self) | |
) | |
(defrule | |
(random-number >= 50) | |
(random-number < 80) | |
(game-time < 60) | |
(up-compare-goal position-goal == flank); hm | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
=> | |
(set-goal unit-goal scout-cavalry) | |
(set-goal strategy-goal flush) | |
(disable-self) | |
) | |
(defrule | |
(current-age == dark-age) | |
(or | |
(and | |
(or | |
(goal nr-map-goal 1) | |
(goal position-goal pocket) | |
) | |
(random-number < 60) | |
) | |
(building-type-count stone-wall > 15) | |
) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal knight) | |
(set-goal strategy-goal boom) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(or | |
(goal position-goal pocket) | |
(goal nr-map-goal 1) | |
) | |
(random-number < 40) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal scorpion) | |
(set-goal strategy-goal boom) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(goal unit-goal scorpion) | |
(or | |
(building-type-count town-center >= tc-level-four) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(set-goal ranged-unit-type-goal scorpion) | |
) | |
(defrule | |
(or | |
(and | |
(goal unit-goal scorpion) | |
(goal control-goal my-unique-unit-line) | |
) | |
(goal unit-goal skirmisher) | |
) | |
(building-type-count-total castle > 1) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(set-goal ranged-unit-type-goal scorpion) | |
) | |
(defrule | |
(random-number > 80) | |
(game-time < 60) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal knight) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(up-compare-goal strategy-goal != rush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal unit-goal knight) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal scorpion) | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if ; persian | |
#load-if-defined SARACEN-CIV | |
(defrule | |
(current-age == dark-age) | |
(random-number <= 20) | |
(goal position-goal pocket) | |
(not (players-civ any-ally aztec)) | |
(game-time < 30) | |
=> | |
(set-goal unit-goal monk) | |
(set-goal ranged-unit-type-goal monk) | |
(disable-self) | |
) | |
(defrule | |
(current-age == dark-age) | |
(random-number <= 50) | |
(up-compare-goal position-goal == flank); hm | |
(game-time < 60) | |
=> | |
(set-goal unit-goal scout-cavalry) | |
(set-goal strategy-goal flush) | |
(set-goal control-goal aggressive-rush) | |
(disable-self) | |
) | |
(defrule | |
(current-age == dark-age) | |
(random-number > 50) | |
(up-compare-goal position-goal == flank); hm | |
(game-time < 60) | |
=> | |
(set-goal unit-goal archer) | |
(set-goal strategy-goal flush) | |
(set-goal control-goal aggressive-rush) | |
(disable-self) | |
) | |
(defrule | |
(goal position-goal pocket) | |
(or | |
(and | |
(goal strategy-goal rush) | |
(goal unit-goal archer) | |
) | |
(goal strategy-goal flush) | |
) | |
(game-time > 60) | |
(game-time < 70) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal ranged-unit-type-goal archer) | |
) | |
(defrule | |
(current-age == dark-age) | |
(or | |
(or | |
(random-number > 70) | |
(building-type-count stone-wall > 15) | |
) | |
(and | |
(goal nr-map-goal 1) | |
(random-number < 25) | |
) | |
) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal monk) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal monk) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
(goal strategy-goal flush) | |
(random-number <= 50) | |
=> | |
(set-goal unit-goal knight) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(goal control-goal shot) | |
(strategic-number sn-current-age >= ci-transit) | |
(building-type-count-total castle > 0) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal ranged-unit-type-goal archer) | |
) | |
(defrule | |
(or | |
(and | |
(goal unit-goal knight) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(and | |
(goal strategy-goal flush) | |
(and | |
(strategic-number sn-current-age == feudal) | |
(players-unit-type-count focus-player spearman-line > 6) | |
) | |
) | |
) | |
=> | |
(set-goal unit-goal archer) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal control-goal aggressive-rush); also stop slinging here, without even cavalier upgrade it is pretty pointless | |
) | |
(defrule | |
(or | |
(and | |
(goal nr-map-goal 1) | |
(building-type-count stone-wall-line < 15) | |
) | |
(and | |
(and | |
(random-number >= 70) | |
(regicide-game) | |
) | |
(goal unit-goal monk) | |
) | |
) | |
(game-time > 15) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal ranged-unit-type-goal monk) | |
(set-goal control-goal 0) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(up-compare-goal strategy-goal != rush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if | |
#load-if-defined SPANISH-CIV | |
(defrule | |
(goal control-goal 0) | |
(or | |
(goal anti-cavalry-threat-goal 1) | |
(players-civ focus-player gothic) | |
) | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone < 5) | |
(nand | |
(strategic-number sn-current-age == castle) | |
(goal strategy-goal boom) | |
) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(chat-to-player my-player-number "Enable training of unique units.") | |
) | |
(defrule | |
(goal unit-goal knight) | |
(goal control-goal my-unique-unit-line) | |
(goal anti-cavalry-threat-goal 1) | |
(building-type-count castle >= 2) | |
(nand | |
(up-research-status c: ri-paladin >= research-pending) | |
(research-available my-unique-unit-upgrade) | |
) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-player my-player-number "Switching to unique units.") | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(strategic-number sn-current-age == feudal) | |
(or | |
(players-unit-type-count focus-player spearman-line > 6) | |
(or | |
(players-civ focus-player mayan) | |
(players-civ focus-player briton) | |
) | |
) | |
=> | |
(set-goal unit-goal skirmisher) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(goal nr-map-goal 1) | |
(and | |
(random-number < 20) | |
(goal position-goal pocket) | |
) | |
) | |
(game-time > 13) | |
(game-time < 60) | |
(up-compare-goal unit-goal != my-unique-unit-line) | |
=> | |
(set-goal unit-goal knight) | |
(set-goal control-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal ranged-unit-type-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(random-number >= 50) | |
(or | |
(random-number >= 75) | |
(goal nr-map-goal 1) | |
) | |
(game-time > 15) | |
(game-time < 60) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal nr-map-goal -1) | |
(random-number >= 25) | |
(random-number < 35) | |
(game-time > 13) | |
(game-time < 60) | |
(not (players-civ any-ally aztec)) | |
=> | |
(set-goal unit-goal monk) | |
(set-goal control-goal 0) | |
(set-goal strategy-goal rush) | |
(set-goal ranged-unit-type-goal monk) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(up-compare-goal strategy-goal != rush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal unit-goal knight) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != boom) | |
(taunt-detected any-ally 33) | |
=> | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal knight) | |
(chat-to-allies-using-id 22156) | |
(acknowledge-taunt this-any-ally 33) | |
) | |
#end-if; spanish | |
#load-if-defined TEUTONIC-CIV | |
(defrule | |
(goal unit-goal knight) | |
(goal control-goal 0) | |
(building-type-count castle > 0) | |
(strategic-number sn-archer-threat < 3) | |
(goal anti-cavalry-threat-goal 1) | |
(up-research-status c: ri-heavy-scorpion < research-pending) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(set-goal ranged-unit-type-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
(goal unit-goal knight) | |
(goal control-goal 0) | |
(building-type-count castle > 0) | |
(or | |
(players-unit-type-count target-player spearman-line > 35) | |
(players-unit-type-count target-player camel-line > 24) | |
) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(goal control-goal my-unique-unit-line) | |
(or | |
(goal anti-cavalry-threat-goal 1) | |
(strategic-number sn-infantry-threat >= 1) | |
) | |
(nor | |
(players-civ every-enemy hun); dont switch to TK vs ca civs | |
(strategic-number sn-archer-threat > 1) | |
) | |
(building-type-count castle > 1) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
(goal strategy-goal flush) | |
=> | |
(set-goal unit-goal knight) | |
(disable-self) | |
) | |
(defrule | |
(or | |
(building-type-count stone-wall > 15) | |
(random-number < 6) | |
) | |
(game-time > 13) | |
(game-time < 60) | |
(random-number <= 20) | |
(not (players-civ any-ally aztec)) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal monk) | |
(set-goal ranged-unit-type-goal monk) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(random-number >= 70) | |
(goal position-goal pocket) | |
(game-time > 13) | |
(population-cap >= 200) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 0) | |
(set-goal unit-goal knight) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(and | |
(random-number >= 80) | |
(nor | |
(players-civ focus-player briton) | |
(players-civ focus-player mayan) | |
) | |
) | |
(and | |
(building-type-count castle > 1) | |
(goal unit-goal monk) | |
) | |
) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal monk) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(goal nr-map-goal 1) | |
(not (goal ranged-unit-type-goal monk)) | |
(game-time > 25) | |
=> | |
(set-goal unit-goal knight) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(up-compare-goal strategy-goal != rush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal unit-goal knight) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal knight) | |
(chat-to-allies-using-id 22156) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(up-research-status c: ri-paladin >= research-pending) | |
(goal anti-cavalry-threat-goal 1) | |
(or | |
(strategic-number sn-archer-threat >= 3) | |
(strategic-number sn-cavalry-threat < 3) | |
) | |
(up-compare-goal ranged-unit-type-goal != scorpion) | |
(up-compare-goal ranged-unit-type-goal != monk) | |
(unit-type-count trade-cart > 4) | |
=> | |
(set-goal ranged-unit-type-goal scorpion) | |
) | |
#end-if;teutonic | |
#load-if-defined TURKISH-CIV | |
(defrule | |
(goal nr-map-goal -1) | |
(up-compare-goal position-goal == flank); hm | |
(random-number < 40) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal scout-cavalry) | |
(disable-self) | |
) | |
(defrule | |
(or | |
(and | |
(or | |
(goal ffa-game-goal 1) | |
(and | |
(random-number >= 50) | |
(goal nr-map-goal 1) | |
) | |
) | |
(goal strategy-goal flush) | |
) | |
(regicide-game) | |
) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal knight) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(strategic-number sn-current-age == feudal) | |
(players-unit-type-count focus-player spearman-line > 6) | |
=> | |
(set-goal unit-goal archer) | |
(set-goal ranged-unit-type-goal archer) | |
) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
(goal strategy-goal flush) | |
(goal unit-goal default-ranged) | |
=> | |
(set-goal unit-goal knight) | |
(set-goal ranged-unit-type-goal archer) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(goal control-goal militiaman-line) | |
(players-unit-type-count focus-player spearman-line > 30) | |
(strategic-number sn-archer-threat < 2) | |
(up-research-status c: ri-champion >= research-pending) | |
(building-type-count-total barracks >= 3) | |
=> | |
(set-goal unit-goal militiaman-line) | |
(chat-to-player my-player-number "Switching to militiaman-line.") | |
) | |
(defrule | |
(current-age == dark-age) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count stone-wall > 15) | |
(game-time > 13) | |
(random-number < 50) | |
=> | |
(set-goal strategy-goal fast-imp) | |
(set-goal unit-goal gunpowder-class) | |
(set-goal ranged-unit-type-goal gunpowder-class) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(up-compare-goal strategy-goal != rush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal unit-goal knight) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal knight) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if | |
#load-if-defined VIKING-CIV | |
(defrule | |
(random-number > 20) | |
(random-number < 40) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal archer) | |
(disable-self) | |
) | |
#load-if-defined UP-POCKET-POSITION | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed); bug fix in maps that were previously falsely detected as water maps | |
(goal strategy-goal flush) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal archer) | |
(disable-self) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(current-age < castle-age) | |
(up-compare-goal position-goal == flank); hm | |
(not (goal strategy-goal flush)) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal militiaman-line) | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(strategic-number sn-current-age == fc-transit) | |
(military-population < 15) | |
(not (goal unit-goal knight)) | |
=> | |
(set-goal unit-goal knight) | |
(set-goal control-goal militiaman-line) | |
(chat-to-player my-player-number "Switching to knights.") | |
) | |
#load-if-defined UP-GAME-AGE2-X2 | |
(defrule | |
(goal control-goal 0) | |
(or | |
(goal strategy-goal boom) | |
(goal position-goal pocket) | |
) | |
(civilian-population > 90) | |
(strategic-number sn-cavalry-threat > 2) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
) | |
#end-if | |
(defrule | |
(goal control-goal 0) | |
(or | |
(and | |
(civilian-population > 90) | |
(or | |
(strategic-number sn-current-age >= ci-transit) | |
(and | |
(food-amount > 400) | |
(gold-amount < 200) | |
) | |
) | |
) | |
(or | |
(goal anti-cavalry-threat-goal 1) | |
(goal enemy-goal eagle-warrior) | |
) | |
) | |
(up-compare-goal strategy-goal != boom) | |
=> | |
(set-goal control-goal militiaman-line) | |
) | |
(defrule | |
(goal control-goal 0) | |
(or | |
(or | |
(goal enemy-goal eagle-warrior) | |
(and | |
(players-unit-type-count focus-player huskarl-line > 4) | |
(civilian-population > 60) | |
) | |
) | |
(and | |
(up-research-status c: ri-arbalest >= research-pending) | |
(up-research-status c: ri-ring-archer-armor >= research-pending) | |
) | |
) | |
(goal strategy-goal boom) | |
=> | |
(set-goal control-goal militiaman-line) | |
) | |
(defrule | |
(civilian-population >= 60) | |
(up-research-status c: ri-long-swordsman >= research-pending) | |
(not (goal unit-goal militiaman-line)) | |
(strategic-number sn-current-age >= ci-transit) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal militiaman-line) | |
(chat-to-player my-player-number "Switching to militiaman-line.") | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal default-unit) | |
(current-age < castle-age) | |
=> | |
(set-goal unit-goal knight) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(goal nr-map-goal 1) | |
(random-number <= 20) | |
) | |
=> | |
(set-goal unit-goal archer) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal strategy-goal boom) | |
(disable-self) | |
) | |
(defrule | |
(game-time > 25) | |
(game-time < 60) | |
(building-type-count castle > 0) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal strategy-goal boom) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal strategy-goal boom) | |
(set-goal control-goal 0) | |
(set-goal unit-goal archer) | |
(set-goal ranged-unit-type-goal archer) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if; viking-civ | |
#load-if-defined INCAN-CIV | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
(goal strategy-goal fast-imp) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal eagle-warrior) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(random-number < 40) | |
(or | |
(random-number > 20) | |
(goal nr-map-goal 1) | |
) | |
(game-time > 13) | |
(or | |
(goal position-goal pocket) | |
(goal nr-map-goal 1) | |
) | |
=> | |
(set-goal unit-goal archer) | |
(set-goal control-goal 0) | |
(set-goal strategy-goal boom) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(random-number >= 40) | |
(goal nr-map-goal 1) | |
(game-time > 13) | |
=> | |
(set-goal unit-goal eagle-warrior) | |
(set-goal control-goal 0) | |
(set-goal strategy-goal boom) | |
(disable-self) | |
) | |
(defrule | |
(current-age == castle-age) | |
(goal strategy-goal boom) | |
(building-type-count-total town-center >= tc-level-three) | |
=> | |
(set-goal strategy-goal fast-imp) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal strategy-goal rush) | |
(goal unit-goal eagle-warrior) | |
(strategic-number sn-cavalry-threat == 0) | |
(strategic-number sn-infantry-threat > 0) | |
(up-research-status c: ri-arbalest < research-pending) | |
=> | |
(set-goal ranged-unit-type-goal slinger) | |
(disable-self) | |
) | |
(defrule | |
(random-number > 65) | |
(random-number < 90) | |
(building-type-count-total castle == 0) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal archer) | |
(disable-self) | |
) | |
(defrule | |
(random-number >= 90) | |
(goal ffa-game-goal -1) | |
(building-type-count-total castle == 0) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal archer) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(disable-self) | |
) | |
(defrule | |
(dropsite-min-distance stone < 5) | |
(building-type-count-total town-center >= tc-level-three) | |
(nor | |
(goal unit-goal my-unique-unit-line) | |
(goal control-goal shot) | |
) | |
(or | |
(or | |
(strategic-number sn-cavalry-threat > 2) | |
(strategic-number sn-infantry-threat > 2) | |
) | |
(and | |
(goal unit-goal archer) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(chat-to-player my-player-number "Preparing in order to train unique units later on.") | |
(disable-self) | |
) | |
(defrule | |
(building-type-count castle > 1) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(set-goal control-goal 0) | |
(chat-to-player my-player-number "Switching to unique units.") | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal strategy-goal boom) | |
(set-goal control-goal 0) | |
(set-goal unit-goal eagle-warrior) | |
(set-goal ranged-unit-type-goal archer) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if; INCAN-CIV | |
#load-if-defined MAGYAR-CIV | |
(defrule | |
(goal strategy-goal flush) | |
=> | |
(set-goal unit-goal scout-cavalry) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
(goal strategy-goal flush) | |
(random-number > 70) | |
=> | |
(set-goal unit-goal knight) | |
(chat-to-player my-player-number "Switching to knights.") | |
(disable-self) | |
) | |
(defrule | |
(or | |
(strategic-number sn-current-age >= ci-transit) | |
(building-type-count-total town-center >= tc-level-four) | |
) | |
(dropsite-min-distance stone < 5) | |
=> | |
(set-goal uu-up-goal 1) | |
(set-goal control-goal my-unique-unit-line) | |
) | |
(defrule | |
(game-time > 13) | |
(random-number >= 70) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal cavalry-archer) | |
(set-goal ranged-unit-type-goal cavalry-archer) | |
(set-goal control-goal my-unique-unit-line) | |
(disable-self) | |
) | |
(defrule | |
(or | |
(regicide-game) | |
(goal nr-map-goal 1) | |
) | |
(game-time > 13) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal cavalry-archer) | |
(set-goal ranged-unit-type-goal cavalry-archer) | |
(set-goal control-goal 0) | |
(disable-self) | |
) | |
(defrule | |
(building-type-count castle == 0) | |
(building-type-count stone-wall-line > 15) | |
(or | |
(players-civ every-enemy aztec) | |
(players-civ every-enemy saracen) | |
) | |
(game-time >= 60) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal scout-cavalry) | |
(set-goal control-goal aggressive-rush) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal unit-goal knight) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal ranged-unit-type-goal cavalry-archer) | |
(set-goal unit-goal cavalry-archer) | |
(chat-to-allies-using-id 22156) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(building-type-count stone-wall-line > 15) | |
(up-compare-goal unit-goal != scout-cavalry) | |
(game-time > 25) | |
=> | |
(set-goal control-goal 0) | |
(set-goal strategy-goal boom) | |
(disable-self) | |
) | |
#end-if | |
#load-if-defined INDIAN-CIV | |
(defrule | |
(game-time > 13) | |
(game-time < 60) | |
(or | |
(or | |
(players-civ every-enemy hun) | |
(players-civ every-enemy mongol) | |
) | |
(or | |
(or | |
(players-civ every-enemy persian) | |
(players-civ every-enemy teutonic) | |
) | |
(or | |
(players-civ every-enemy frankish) | |
(players-civ every-enemy magyar) | |
) | |
) | |
) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal knight) | |
(disable-self) | |
) | |
#load-if-not-defined UP-POCKET-POSITION | |
(defrule | |
(goal nr-map-goal -1) | |
(random-number > 60) | |
(up-compare-goal position-goal == flank); hm | |
(game-time < 13) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal scout-cavalry) | |
(disable-self) | |
) | |
#else | |
(defrule | |
(goal nr-map-goal -1) | |
(random-number < 30) | |
(game-time > 13) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal archer) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal archer) | |
(disable-self) | |
) | |
#end-if | |
(defrule | |
(or | |
(goal unit-goal skirmisher) | |
(goal unit-goal archer) | |
) | |
(building-type-count stable > 1) | |
=> | |
(set-goal unit-goal knight) | |
(chat-to-player my-player-number "Enable training of camels.") | |
) | |
(defrule | |
(goal unit-goal skirmisher) | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone < 6) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(up-compare-goal strategy-goal != rush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if | |
#load-if-defined SLAVIC-CIV | |
(defrule | |
(or | |
(and | |
(goal unit-goal knight) | |
(game-time > 1800) | |
) | |
(and | |
(goal unit-goal scorpion) | |
(building-type-count-total town-center >= tc-level-four) | |
) | |
) | |
(dropsite-min-distance stone < 6) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(or | |
(goal unit-goal knight) | |
(goal unit-goal scorpion) | |
) | |
(building-type-count castle > 0) | |
(or | |
(building-type-count castle > 1) | |
(goal unit-goal knight) | |
) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(set-goal control-goal 0) | |
) | |
(defrule | |
(food-amount > 150) | |
(or | |
(gold-amount < 50) | |
(food-amount > 300) | |
) | |
(or | |
(goal unit-goal monk) | |
(goal strategy-goal flush) | |
) | |
(or | |
(players-unit-type-count focus-player eagle-warrior-line > 7) | |
(goal enemy-goal eagle-warrior) | |
) | |
=> | |
(set-goal unit-goal militiaman-line) | |
(chat-to-player my-player-number "Training long-swordsmen to counter an EW rush.") | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(random-number > 80) | |
(or | |
(goal nr-map-goal 1) | |
(random-number > 90) | |
) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal strategy-goal boom) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(goal nr-map-goal 1) | |
(goal position-goal pocket) | |
) | |
(random-number < 80) | |
(random-number > 60) | |
(game-time > 13) | |
(game-time < 60) | |
=> | |
(set-goal unit-goal scorpion) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(random-number < 15) | |
(game-time < 60) | |
(game-time > 13) | |
=> | |
(set-goal unit-goal monk) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal monk) | |
(set-goal strategy-goal rush) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(up-compare-goal strategy-goal != rush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal monk) | |
(set-goal unit-goal monk) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal scorpion) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if; slavic-civ | |
#load-if-defined ITALIAN-CIV | |
(defrule | |
(game-time < 60) | |
(game-time > 16) | |
(or | |
(goal nr-map-goal 1) | |
(random-number < 40) | |
) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(set-goal ranged-unit-type-goal 0) | |
(disable-self) | |
) | |
#load-if-not-defined UP-POCKET-POSITION | |
(defrule | |
(goal nr-map-goal -1) | |
(random-number > 60) | |
(up-compare-goal position-goal == flank); hm | |
(game-time > 13) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal unit-goal archer) | |
(disable-self) | |
) | |
#end-if | |
(defrule | |
(goal nr-map-goal -1) | |
(random-number >= 40) | |
(random-number < 61) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal knight) | |
(disable-self) | |
) | |
(defrule | |
(random-number < 10) | |
(game-time > 20) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal monk) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal monk) | |
(disable-self) | |
) | |
(defrule | |
(building-type-count-total town-center >= tc-level-three) | |
(goal unit-goal archer) | |
(strategic-number sn-cavalry-threat > 1) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
) | |
(defrule | |
(goal control-goal my-unique-unit-line) | |
(building-type-count castle > 0) | |
(not (goal unit-goal gunpowder-class)) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
) | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
(or | |
(strategic-number sn-infantry-threat > 2) | |
(players-civ every-enemy gothic) | |
) | |
=> | |
(set-goal unit-goal gunpowder-class) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(up-compare-goal strategy-goal != flush) | |
(up-compare-goal strategy-goal != rush) | |
(taunt-detected any-ally 32) | |
=> | |
(acknowledge-taunt this-any-ally 32) | |
(set-goal strategy-goal rush) | |
(set-goal control-goal aggressive-rush) | |
(set-goal ranged-unit-type-goal archer) | |
(set-goal unit-goal archer) | |
(chat-to-allies-using-id 22155) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(game-time > 30) | |
(game-time < 300) | |
(taunt-detected any-ally 33) | |
=> | |
(acknowledge-taunt this-any-ally 33) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal my-unique-unit-line) | |
(chat-to-allies-using-id 22156) | |
) | |
#end-if ;italy | |
#load-if-defined LOW-RESOURCES-START | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(or | |
(game-time < 850) | |
(and | |
(building-type-count-total monastery > 0) | |
(and | |
(players-current-age focus-player == feudal-age) | |
(players-military-population focus-player < 2) | |
) | |
) | |
) | |
(strategic-number sn-current-age >= fc-transit) | |
(goal unit-goal eagle-warrior) | |
(goal control-goal 0) | |
=> | |
(set-goal control-goal aggressive-rush) | |
(chat-to-player my-player-number "Going for an aggressive EW rush.") | |
) | |
#load-if-not-defined DIFFICULTY-MODERATE | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count-total villager >= 28) | |
(goal strategy-goal flush) | |
(up-compare-goal enemy-goal != flush) | |
(or | |
(unit-type-count-total villager >= 30) | |
(and | |
(up-compare-goal unit-goal != militiaman-line) | |
(up-compare-goal unit-goal != scout-cavalry) | |
) | |
) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal default-unit) | |
(chat-local-to-self "Had a bad dark-age, switching to a fast castle-age strategy.") | |
) | |
#end-if | |
#end-if | |
#load-if-defined LUDIKRIS-MAP | |
#load-if-defined UP-POCKET-POSITION | |
(defrule | |
(up-compare-goal strategy-goal == flush) | |
=> | |
(set-goal strategy-goal boom) | |
(set-goal unit-goal default-unit) | |
(disable-self)) | |
#else | |
(defrule | |
(up-compare-goal strategy-goal == flush) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal default-unit) | |
(disable-self)) | |
#end-if | |
#end-if | |
#load-if-not-defined UP-POCKET-POSITION | |
#load-if-not-defined BRITON-CIV | |
#load-if-not-defined CHINESE-CIV | |
#load-if-not-defined MAYAN-CIV | |
#load-if-not-defined MONGOL-CIV | |
#load-if-not-defined KOREAN-CIV | |
(defrule | |
(goal unit-goal my-unique-unit-line) | |
(goal train-civ-goal 1) | |
(strategic-number sn-resource-control == 0) | |
(unit-type-count-total my-unique-unit-line < 3) | |
(building-type-count castle > 0) | |
(building-type-count stone-wall-line < 15) | |
(current-age-time < 300) | |
(current-age == castle-age) | |
(food-amount < unique-unit-food) | |
=> | |
(set-goal train-civ-goal -1) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if ; NOT DM | |
#load-if-defined DEATH-MATCH | |
#load-if-defined KOREAN-CIV | |
(defrule | |
(starting-age < imperial-age) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal militiaman-line) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
#end-if | |
#load-if-defined TURKISH-CIV | |
(defrule | |
(strategic-number sn-infantry-threat > 1) | |
(research-completed ri-chemistry) | |
=> | |
(set-goal ranged-unit-type-goal gunpowder-class) | |
(disable-self) | |
) | |
#end-if | |
#end-if | |
#load-if-not-defined BRITON-CIV | |
#load-if-not-defined CELTIC-CIV | |
#load-if-not-defined FRANKISH-CIV | |
#load-if-not-defined GOTHIC-CIV | |
#load-if-not-defined HUN-CIV | |
#load-if-not-defined KOREAN-CIV | |
#load-if-not-defined MAYAN-CIV | |
#load-if-not-defined MONGOL-CIV | |
#load-if-not-defined PERSIAN-CIV | |
#load-if-not-defined VIKING-CIV | |
#load-if-not-defined MAGYAR-CIV | |
#load-if-not-defined INCAN-CIV | |
#load-if-not-defined INDIAN-CIV | |
(defrule | |
(or (taunt-detected any-computer 230) | |
(taunt-detected any-human 230)) | |
(current-age <= castle-age); dark | |
; (game-time > 30) | |
(game-time < 300) | |
=> | |
(set-goal strategy-goal rush) | |
(set-goal unit-goal monk) | |
(set-goal ranged-unit-type-goal monk) | |
(chat-to-player this-any-computer "30Going for a mush.") | |
(chat-to-player this-any-human "30Going for a mush.") | |
(acknowledge-taunt this-any-computer 230) | |
(acknowledge-taunt this-any-human 230)) | |
#load-if-not-defined AZTEC-CIV | |
(defrule | |
(goal strategy-goal flush) | |
(goal ranged-unit-type-goal monk) | |
=> | |
(set-goal ranged-unit-type-goal default-ranged) | |
) | |
(defrule | |
(goal unit-goal monk) | |
(strategic-number sn-archer-threat > 1) | |
(or | |
(and | |
(building-type-count-total monastery < 3) | |
(game-time < 1500) | |
) | |
(or | |
(or | |
(civ-selected japanese) | |
(civ-selected chinese) | |
) | |
(or | |
(civ-selected slavic) | |
(civ-selected teutonic) | |
) | |
) | |
) | |
=> | |
(set-goal unit-goal scorpion) | |
(set-goal ranged-unit-type-goal monk) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal flush) | |
(goal unit-goal militiaman-line) | |
(or | |
(strategic-number sn-archer-threat > 1) | |
(and | |
(players-building-type-count focus-player archery-range > 1) | |
(goal enemy-goal skirmisher) | |
) | |
) | |
(strategic-number sn-infantry-threat == 0) | |
=> | |
(set-goal unit-goal skirmisher) | |
(chat-to-player my-player-number "Switching to skirmishers.") | |
) | |
#load-if-not-defined AZTEC-CIV | |
#load-if-not-defined VIKING-CIV | |
#load-if-not-defined MAYAN-CIV | |
(defrule | |
(goal strategy-goal fast-imp) | |
(up-compare-goal unit-goal != gunpowder-class) | |
(strategic-number sn-current-age >= ci-transit) | |
=> | |
(set-goal strategy-goal rush) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(current-age < castle-age) | |
(goal unit-goal my-unique-unit-line); change it or it will bug as no extra stone will be gathered during castle age advance | |
(building-type-count-total castle == 0) | |
=> | |
(set-goal unit-goal militiaman-line) | |
) | |
#end-if | |
#load-if-not-defined BYZANTINE-CIV | |
#load-if-not-defined INDIAN-CIV | |
(defrule | |
(goal strategy-goal rush) | |
(or | |
(goal unit-goal skirmisher) | |
(goal unit-goal mix) | |
) | |
(not (goal control-goal my-unique-unit-line)) | |
(research-available imperial-age) | |
(dropsite-min-distance stone < 6) | |
=> | |
(set-goal unit-goal default-unit) | |
(chat-to-player my-player-number "Switching to my default unit.") | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(goal strategy-goal flush) | |
(goal unit-goal scout-cavalry) | |
(gold-amount > 250) | |
(building-type-count stable > 0); training scouts doesn't depend on the unit-goal, building a stable does | |
=> | |
(set-goal unit-goal skirmisher); use this to decrease gold gatherer percentage | |
) | |
#load-if-not-defined BYZANTINE-CIV | |
#load-if-not-defined CELTIC-CIV | |
(defrule | |
(goal strategy-goal flush) | |
(or | |
(goal unit-goal scout-cavalry) | |
(goal unit-goal skirmisher) | |
) | |
(strategic-number sn-current-age == fc-transit) | |
=> | |
(set-goal unit-goal default-ranged) | |
(set-goal ranged-unit-type-goal default-ranged) | |
(chat-to-player my-player-number "Switching to my default ranged unit.") | |
) | |
#end-if | |
(defrule | |
(goal strategy-goal flush) | |
(goal unit-goal default-ranged) | |
(or | |
(or | |
(civ-selected frankish) | |
(civ-selected persian) | |
) | |
(or | |
(civ-selected spanish) | |
(civ-selected teutonic) | |
) | |
) | |
=> | |
(set-goal unit-goal knight) | |
(chat-to-player my-player-number "Switching to knights.") | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(goal unit-goal default-ranged) | |
(or | |
(civ-selected gothic) | |
(civ-selected celtic) | |
) | |
=> | |
(set-goal unit-goal militiaman-line) | |
(chat-to-player my-player-number "Switching to militiaman-line.") | |
) | |
#end-if | |
#else ; not PIDM | |
(defrule | |
(not (goal unit-goal cavalry-archer)) | |
(up-research-status c: ri-bloodlines >= research-pending) | |
(up-research-status c: ri-paladin >= research-pending) | |
=> | |
(set-goal unit-goal knight) | |
) | |
(defrule | |
(nor | |
(up-research-status c: ri-bloodlines >= research-pending) | |
(up-research-status c: ri-paladin >= research-pending) | |
) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
) | |
#end-if ;PIDM | |
(defrule | |
(true) ; provisory but can leave it in | |
=> | |
(set-goal aofe-game-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(gold-amount < 50) | |
(unit-type-count fishing-ship >= 10) | |
(up-research-status c: ri-hand-cart >= research-pending) | |
(can-research ri-gillnets) | |
=> | |
(research ri-gillnets) | |
) | |
(defrule | |
(or | |
(unit-type-count eagle-warrior > 12) | |
(strategic-number sn-resource-control == ri-elite-eagle-warrior) | |
) | |
(can-research-with-escrow ri-eagle-warrior) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-eagle-warrior) | |
) | |
(defrule | |
(or | |
(or | |
(unit-type-count genoese-crossbowman > 10) | |
(unit-type-count kamayuk > 10) | |
) | |
(or | |
(unit-type-count magyar-huszar > 10) | |
(or | |
(unit-type-count elephant-archer > 10) | |
(unit-type-count boyar > 10) | |
) | |
) | |
) | |
(can-research-with-escrow my-unique-unit-upgrade);fix for the fact that new uu don't count as my-uu-line | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research my-unique-unit-upgrade) | |
(set-goal uu-up-goal 0) | |
) | |
#load-if-defined AZTEC-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count skirmisher-line > 15) | |
(or | |
(unit-type-count battering-ram-line > 3) | |
(unit-type-count trebuchet-set > 0) | |
) | |
(can-research-with-escrow ri-atlatl) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-atlatl) | |
) | |
(defrule | |
(building-type-count castle > 0) | |
(research-available my-unique-research) | |
(up-research-status c: ri-blast-furnace >= research-pending) | |
(up-research-status c: ri-plate-mail >= research-pending) | |
(nand | |
(or | |
(unit-type-count eagle-warrior-line > 10) | |
(unit-type-count heavy-eagle-warrior > 10) | |
) | |
(research-available ri-elite-eagle-warrior) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
(defrule | |
(up-research-status c: ri-blast-furnace >= research-pending) | |
(up-research-status c: ri-plate-mail >= research-pending) | |
(can-research-with-escrow my-unique-research) | |
(nand | |
(or | |
(unit-type-count eagle-warrior-line > 10) | |
(unit-type-count heavy-eagle-warrior > 10) | |
) | |
(research-available ri-elite-eagle-warrior) | |
) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research my-unique-research) | |
) | |
#end-if | |
#load-if-defined BRITON-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count trebuchet-set > 3) | |
(up-research-status c: my-unique-research >= research-pending) | |
(can-research ri-war-wolf) | |
=> | |
(research ri-war-wolf) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(building-type-count castle > 0) | |
(research-available my-unique-research) | |
(population >= del-civ-pop) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
#end-if | |
#load-if-defined BYZANTINE-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count fire-ship-line > 3) | |
(can-research-with-escrow ri-greek-fire) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-greek-fire) | |
) | |
(defrule | |
(up-compare-goal ranged-unit-type-goal != archer) | |
(up-research-status c: ri-halberdier >= research-pending) | |
(food-amount < 300) | |
(gold-amount > 700) | |
(wood-amount > 400) | |
=> | |
(set-goal ranged-unit-type-goal archer) | |
) | |
#end-if | |
#load-if-defined CELTIC-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(population > max-civ-pop) | |
(can-research ri-stronghold) | |
=> | |
(research ri-stronghold) | |
) | |
#end-if | |
#load-if-defined CHINESE-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(building-type-count bombard-tower > 1) | |
(can-research ri-great-wall) | |
=> | |
(research ri-great-wall) | |
) | |
#end-if | |
#load-if-defined FRANKISH-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(population > del-civ-pop) | |
(death-match-game) | |
) | |
(can-research ri-chivalry) | |
=> | |
(research ri-chivalry) | |
) | |
(defrule | |
(unit-type-count trade-cart > 20) | |
(goal anti-cavalry-threat-goal 1) | |
(goal unit-goal militiaman-line) | |
(up-research-status c: ri-cavalier >= research-pending) | |
=> | |
(set-goal unit-goal knight) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal scorpion) | |
) | |
(defrule | |
(unit-type-count trade-cart > 20) | |
(goal anti-cavalry-threat-goal 1) | |
(goal control-goal militiaman-line) | |
=> | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal scorpion) | |
) | |
#end-if | |
#load-if-defined GOTHIC-CIV | |
(defrule | |
(true) | |
=> | |
(do-nothing); This is just to match the up-jump-rule. | |
(disable-self) | |
) | |
#end-if | |
#load-if-defined HUN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal unit-goal my-unique-unit-line) | |
(can-research ri-marauders) | |
=> | |
(research ri-marauders) | |
) | |
#end-if | |
#load-if-defined JAPANESE-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(building-type-count watch-tower > 3) | |
(or | |
(up-research-status c: ri-masonry >= research-pending) | |
(goal under-attack-goal 1) | |
) | |
(can-research ri-yasama) | |
=> | |
(research ri-yasama) | |
) | |
(defrule | |
(up-research-status c: my-unique-unit-upgrade >= research-pending) | |
(unit-type-count trebuchet-set >= 4) | |
(can-research-with-escrow my-unique-research) | |
=> | |
(release-escrow wood)(release-escrow gold) | |
(research my-unique-research) | |
) | |
#end-if | |
#load-if-defined KOREAN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count turtle-ship-line > 3) | |
(can-research ri-panokseon) | |
=> | |
(research ri-panokseon) | |
) | |
#end-if | |
#load-if-defined MAYAN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count archer-line >= 18) | |
(goal team-coordination-goal 1); attacking | |
(can-research ri-obsidian-arrows) | |
=> | |
(research ri-obsidian-arrows) | |
) | |
#end-if | |
#load-if-defined MONGOL-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(wood-amount > 600) | |
(can-research ri-nomads) | |
=> | |
(research ri-nomads) | |
) | |
(defrule | |
(building-type-count house > 0) | |
(research-completed ri-nomads) | |
=> | |
(delete-building house) | |
) | |
#end-if | |
#load-if-defined PERSIAN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(up-research-status c: ri-murder-holes >= research-pending) | |
(can-research ri-boiling-oil) | |
=> | |
(research ri-boiling-oil) | |
) | |
(defrule | |
(can-research-with-escrow my-unique-research) | |
(or (up-research-status c: my-unique-unit-upgrade >= research-pending) | |
(unit-type-count my-unique-unit-line > 4)) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research my-unique-research) | |
) | |
#end-if | |
#load-if-defined SARACEN-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count monk >= 11) | |
(or (strategic-number sn-current-age >= ci-transit) | |
(gold-amount < 500)) | |
(can-research ri-madrasah) | |
=> | |
(research ri-madrasah) | |
) | |
#end-if | |
#load-if-defined SPANISH-CIV | |
(defrule | |
(or (strategic-number sn-resource-control <= 2) | |
(strategic-number sn-resource-control == ri-inquisition)) | |
(unit-type-count monk > 7) | |
(strategic-number sn-current-age >= ci-transit) | |
(can-research-with-escrow ri-inquisition) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-inquisition) | |
) | |
(defrule | |
(random-number < 90) | |
(goal strategy-goal boom) | |
(goal unit-goal my-unique-unit-line) | |
(current-age == castle-age) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-focus-player-number g:= closest-enemy-goal) | |
(or (or (players-civ focus-player gothic) | |
(players-civ focus-player indian)) | |
(players-civ focus-player persian)) | |
=> | |
(set-goal ranged-unit-type-goal monk) | |
(disable-self) | |
) | |
(defrule | |
(population > del-civ-pop) | |
(current-age-time > 300) | |
(can-research my-unique-research) | |
=> | |
(research my-unique-research) | |
(set-strategic-number sn-allow-civilian-defense 3) | |
) | |
#end-if | |
#load-if-defined TEUTONIC-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-current-age >= ci-transit) | |
(can-research ri-ironclad) | |
=> | |
(research ri-ironclad) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(goal control-goal 0) | |
(strategic-number sn-archer-threat >= 2) | |
(goal anti-cavalry-threat-goal 1) | |
(up-research-status c: my-unique-unit-upgrade < research-pending) | |
=> | |
(set-goal control-goal 0) | |
(set-goal uu-up-goal 0) | |
(set-goal ranged-unit-type-goal scorpion) | |
(disable-self) | |
) | |
#end-if | |
#load-if-defined TURKISH-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count cavalry-archer-class > high-min-number-upgrade) | |
(can-research ri-sipahi) | |
=> | |
(research ri-sipahi) | |
) | |
#end-if | |
#load-if-defined VIKING-CIV | |
(defrule | |
(strategic-number sn-resource-control < 3) | |
(unit-type-count berserk-line > mid-min-number-upgrade) | |
(up-research-status c: my-unique-unit-upgrade >= research-pending) | |
(strategic-number sn-cavalry-threat > 1) | |
(can-research ri-chieftains) | |
=> | |
(research ri-chieftains) | |
) | |
(defrule | |
(can-research-with-escrow my-unique-research) | |
(up-research-status c: my-unique-unit-upgrade >= research-pending) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research my-unique-research) | |
) | |
#end-if | |
#load-if-defined MAGYAR-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (strategic-number sn-current-age >= ci-transit) | |
(game-time > 3000)) | |
(can-research-with-escrow ri-mercenaries) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-mercenaries) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count cavalry-archer-class > high-min-number-upgrade) | |
(can-research ri-recurve-bow) | |
=> | |
(research ri-recurve-bow) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(goal nr-map-goal 1) | |
=> | |
(set-goal unit-goal knight) | |
(set-goal strategy-goal rush) | |
(disable-self) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(building-type-count-total stone-wall < 15) | |
(random-number < 3) | |
=> | |
(set-goal unit-goal archer) | |
(set-goal strategy-goal rush) | |
(disable-self) | |
) | |
#end-if | |
#load-if-defined INCAN-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (strategic-number sn-resource-control < 1) | |
(goal hostilities-goal 1)) | |
(or (unit-type-count skirmisher-line > 15) | |
(unit-type-count slinger > 9)) | |
(can-research ri-andean-sling) | |
=> | |
(research ri-andean-sling) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(up-research-status c: ri-conscription >= research-pending) | |
(can-research my-unique-research) | |
=> | |
(research my-unique-research) | |
) | |
(defrule | |
(dropsite-min-distance stone < 5) | |
(or (up-compare-goal control-goal != shot) | |
(up-research-status c: ri-elite-eagle-warrior >= research-pending)) | |
(strategic-number sn-cavalry-threat > 1) | |
=> | |
(set-goal control-goal my-unique-unit-line) | |
(set-goal uu-up-goal 1) | |
(chat-to-player my-player-number "Preparing in order to train unique units later on.") | |
(disable-self) | |
) | |
#end-if | |
#load-if-defined SLAVIC-CIV | |
(defrule | |
(or (strategic-number sn-resource-control <= 2) | |
(strategic-number sn-resource-control == ri-orthodoxy)) | |
(unit-type-count monk >= 7) | |
(or (strategic-number sn-current-age >= ci-transit) | |
(goal hostilities-goal 1)) | |
(can-research-with-escrow ri-orthodoxy) | |
=> | |
(release-escrow gold) | |
(research ri-orthodoxy) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or (up-research-status c: ri-halberdier >= research-pending) | |
(up-research-status c: ri-champion >= research-pending)) | |
(unit-type-count infantry-class > 20) | |
(can-research my-unique-research) | |
=> | |
(research my-unique-research) | |
) | |
#end-if | |
#load-if-defined INDIAN-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count camel-line > 7) | |
(can-research-with-escrow ri-imperial-camel) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-imperial-camel) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(gold-amount < 100) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(can-research ri-sultans) | |
=> | |
(research ri-sultans) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count hand-cannoneer > 7) | |
(can-research ri-shatagni) | |
=> | |
(research ri-shatagni) | |
) | |
#end-if | |
#load-if-defined ITALIAN-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(goal hostilities-goal 1) | |
(strategic-number sn-resource-control < 1) | |
) | |
(or | |
(unit-type-count genoese-crossbowman > 10) | |
(up-research-status c: my-unique-unit-upgrade >= research-pending) | |
) | |
(can-research ri-pavise) | |
=> | |
(research ri-pavise) | |
) | |
#end-if | |
#load-if-defined AZTEC-CIV | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(game-time > 1800) | |
(goal unit-goal monk) | |
(wood-amount > 400) | |
(food-amount > 800) | |
(gold-amount < 300) | |
=> | |
(set-goal unit-goal skirmisher) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal monk) | |
) | |
#else | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(game-time > 1800) | |
(goal unit-goal monk) | |
(wood-amount > 400) | |
(food-amount > 800) | |
(gold-amount < 300) | |
=> | |
(set-goal unit-goal my-unique-unit-line) | |
(set-goal control-goal 0) | |
(set-goal ranged-unit-type-goal monk) | |
) | |
#end-if | |
(defrule | |
(game-time > 3000) | |
(goal ranged-unit-type-goal monk) | |
(unit-type-count trade-cart < 6) | |
(dropsite-min-distance gold > 10) | |
=> | |
(set-goal ranged-unit-type-goal 0) | |
) | |
#load-if-defined BALTIC-MAP | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed) | |
(goal position-goal pocket) | |
(or (game-time < 1800) | |
(and (goal enemy-boats-goal 1) | |
(unit-type-count warship-class < 35))) | |
=> | |
(set-goal strategy-goal rush) | |
(set-strategic-number sn-minimum-water-body-size-for-dock water-islands) | |
) | |
(defrule | |
(game-time > 1800) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(goal position-goal pocket) | |
(or | |
(goal enemy-boats-goal 0) | |
(unit-type-count warship-class > 50) | |
) | |
=> | |
(set-strategic-number sn-minimum-water-body-size-for-dock water-mixed); water secured, train land army | |
) | |
#end-if | |
; end strategy section | |
;******************** BOAR HUNTING ************************************** | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
(defrule | |
(unit-type-count villager >= 9); 8 | |
(dropsite-min-distance live-boar <= 32) | |
(can-research ri-loom) | |
=> | |
(research ri-loom)) | |
(defrule ; split rule | |
(or (dropsite-min-distance live-boar <= -1) | |
(or (unit-type-count 216 >= 1); male hunter | |
(or (unit-type-count 122 >= 1); female hunter | |
(or (unit-type-count villager < 9) | |
(up-research-status c: ri-loom != research-complete))))) | |
=> | |
(up-jump-rule 2)) | |
(defrule | |
; (timer-triggered tensec) | |
(dropsite-min-distance live-boar s:<= sn-maximum-hunt-drop-distance) | |
; nn (dropsite-min-distance boar-hunting >= 5); no slain boar left | |
;(or | |
; j (unit-type-count villager >= 9) | |
; (unit-type-count 958 <= 0)); living domestic animals ; not working? | |
;(or (unit-type-count villager >= 14) | |
;(or (food-amount >= 50) | |
;(or (up-pending-objects c: villager >= 1) | |
; (building-type-count-total farm >= 3)))) | |
=> | |
(set-strategic-number sn-enable-boar-hunting 2) | |
(set-strategic-number sn-minimum-boar-hunt-group-size 1) | |
(set-strategic-number sn-minimum-number-hunters 1) | |
(set-strategic-number sn-maximum-food-drop-distance 16) ; "failed" hunt | |
(set-strategic-number sn-maximum-hunt-drop-distance 32) | |
; (up-retask-gatherers food c: 1) | |
(up-request-hunters c: 1) | |
; (chat-local-to-self "Trying to start a hunt.") | |
) | |
(defrule | |
(dropsite-min-distance live-boar <= 32) | |
(dropsite-min-distance live-boar >= 0) | |
(strategic-number sn-enable-boar-hunting == 2) | |
(strategic-number sn-minimum-boar-hunt-group-size == 1) | |
(strategic-number sn-minimum-number-hunters == 1) | |
(unit-type-count 216 <= 0); male hunter | |
(unit-type-count 122 <= 0); female hunter | |
=> | |
(up-retask-gatherers food c: 1) | |
(disable-self)); test | |
(defrule | |
(dropsite-min-distance live-boar <= 16) | |
(strategic-number sn-enable-boar-hunting >= 1) | |
(unit-type-count 216 < 2); male hunter | |
(unit-type-count 122 < 2); female hunter | |
(or (unit-type-count 216 >= 1); male hunter | |
(unit-type-count 122 >= 1)); female hunter | |
=> | |
(set-strategic-number sn-minimum-number-hunters 2) | |
(up-request-hunters c: 1) | |
; (chat-local-to-self "Requesting a support hunter.") | |
) | |
(defrule | |
(dropsite-min-distance live-boar <= 10) ; else the risc of a dead vill is still too high | |
(dropsite-min-distance live-boar >= 0) | |
(unit-type-count 216 <= 2); male hunter | |
(unit-type-count 122 <= 2); female hunter | |
(strategic-number sn-enable-boar-hunting >= 1) | |
;(or (unit-type-count 216 >= 1); at least 1 hunter = the boar is not just standing too close to the mill | |
; (unit-type-count 122 >= 1)) | |
=> | |
(set-strategic-number sn-minimum-boar-hunt-group-size 7) | |
(set-strategic-number sn-minimum-number-hunters 7) | |
(up-retask-gatherers food c: 1) | |
(up-request-hunters c: 6) | |
; (chat-local-to-self "Adding more hunters.") | |
) | |
(defrule | |
(or (dropsite-min-distance live-boar s:> sn-maximum-hunt-drop-distance) | |
(and (dropsite-min-distance live-boar >= 11) | |
(dropsite-min-distance boar-hunting <= 10))); eating a boar right now | |
(strategic-number sn-minimum-number-hunters > 2) | |
=> | |
(set-strategic-number sn-minimum-boar-hunt-group-size 1) | |
(set-strategic-number sn-minimum-number-hunters 2) | |
; (chat-local-to-self "Lowering min-hunters.") | |
) | |
(defrule | |
(or (dropsite-min-distance live-boar > 32) | |
(dropsite-min-distance live-boar <= -1)) | |
(or (building-type-count-total mill >= 2) | |
(unit-type-count villager >= 12)) | |
(or (unit-type-count villager >= 18) | |
(and (cc-players-unit-type-count 0 48 == 0); no boar on the map | |
(cc-players-unit-type-count 0 822 == 0))) | |
(strategic-number sn-enable-boar-hunting != 1) | |
=> | |
(set-strategic-number sn-enable-boar-hunting 1); enable hunting of all kinds | |
(set-strategic-number sn-minimum-boar-hunt-group-size 2) | |
(set-strategic-number sn-minimum-number-hunters 2) | |
; (chat-local-to-self "Disabling hunting restrictions.") | |
) | |
#end-if | |
#end-if | |
;******************** RESOURCE MANAGEMENT AND AGE UP ******************** | |
(defrule | |
(or (strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(building-type-count-total town-center == 0)) | |
=> | |
(up-jump-rule 27) | |
) | |
(defrule | |
(game-time < 2400) | |
(or (goal strategy-goal boom) | |
(civ-selected indian)); camel + pikes would be overkill | |
(goal unit-goal knight) | |
=> | |
(up-jump-rule 1) | |
) | |
(defrule | |
(goal train-civ-goal 1) | |
(strategic-number sn-cavalry-threat >= 1) | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-military-level >= 0) | |
(military-population > 10) | |
(building-type-count barracks > 0) | |
(nand (goal unit-goal knight) | |
(unit-type-count villager < 60)) | |
(research-available ri-pikeman) | |
=> | |
(set-strategic-number sn-resource-control ri-pikeman) | |
(set-goal train-civ-goal ri-pikeman) | |
;debug (chat-to-player my-player-number "Saving resources for ri-pikeman") | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(goal train-civ-goal 1) | |
(goal strategy-goal rush) | |
(goal unit-goal eagle-warrior) | |
(research-available ri-chain-mail) | |
=> | |
(set-goal train-civ-goal ri-chain-mail); stop villager training only EWs | |
;debug (chat-to-player my-player-number "Saving resources for ri-chain-mail") | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(goal train-civ-goal ri-chain-mail) | |
(goal strategy-goal rush) | |
(goal unit-goal eagle-warrior) | |
(up-research-status c: ri-pikeman >= research-pending) | |
(research-available ri-chain-mail) | |
=> | |
(set-strategic-number sn-resource-control ri-chain-mail);stop all units; vils remain stopped | |
;debug (chat-to-player my-player-number "Saving resources for ri-chain-mail") | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(current-age >= castle-age) | |
(unit-type-count villager > villager-siege-workshop) | |
(building-type-count-total siege-workshop < 1) | |
(goal forward-threat-goal 1); don't check wood to block other buildings if enemy forwarded us | |
(nand | |
(unit-type-count ranged-unit-class < 5) | |
(strategic-number sn-military-level < 0) | |
) | |
(wood-amount < 260); some buffer | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(set-strategic-number sn-resource-control battering-ram) | |
(set-goal save-wood-goal 1) | |
;debug;debug (chat-to-player my-player-number "Saving resources for siege-workshop") | |
) | |
(defrule | |
(building-type-count-total town-center >= tc-level-two) | |
(goal unit-goal my-unique-unit-line) | |
(or | |
(and | |
(goal monk-threat-goal 1) | |
(map-type arena) | |
) | |
(or | |
(players-unit-type-count focus-player mangonel-line > 1) | |
(players-unit-type-count focus-player scorpion-line > 4) | |
) | |
) | |
(wood-amount >= 200) | |
(current-age >= castle-age) | |
(building-type-count-total siege-workshop < 1) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(strategic-number sn-archer-threat > 1) | |
(goal unit-goal my-unique-unit-line) | |
(wood-amount >= 200) | |
(current-age == castle-age) | |
(building-type-count-total siege-workshop < 1) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(wood-amount >= 800) | |
(current-age == castle-age) | |
(building-type-count-total university < 1) | |
(building-type-count-total castle < 1) | |
(building-type-count-total siege-workshop < 1) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-not-defined BYZANTINE-CIV | |
#load-if-not-defined HUN-CIV | |
#load-if-not-defined VIKING-CIV | |
(defrule | |
(wood-amount >= 200) | |
(current-age >= castle-age) | |
(strategic-number sn-resource-control < 2) | |
(building-type-count-total town-center < tc-level-four) | |
(goal strategy-goal boom) | |
(or | |
(goal unit-goal knight) | |
(civ-selected teutonic) | |
) | |
(strategic-number sn-archer-threat < 2) | |
=> | |
(up-jump-rule 1) | |
) | |
(defrule | |
(wood-amount >= 200) | |
(current-age >= castle-age) | |
(strategic-number sn-resource-control < 2) | |
(building-type-count-total town-center >= tc-level-three) | |
(or | |
(goal unit-goal knight) | |
(civ-selected teutonic) | |
) | |
(building-type-count-total siege-workshop < 1) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-not-defined UP-POCKET-POSITION | |
(defrule | |
(current-age == castle-age) | |
(or | |
(strategic-number sn-archer-threat > 1) | |
(players-building-type-count focus-player siege-workshop > 1) | |
) | |
(or | |
(goal unit-goal knight) | |
(goal ranged-unit-type-goal monk) | |
) | |
(building-type-count-total siege-workshop < 1) | |
(wood-amount < 200) | |
(game-time < 1500) | |
=> | |
(set-goal save-wood-goal siege-workshop) | |
(chat-local-to-self "Saving resources for siege-workshop") | |
) | |
(defrule | |
(can-build siege-workshop) | |
(or | |
(strategic-number sn-archer-threat > 1) | |
(and | |
(players-building-type-count focus-player siege-workshop > 1) | |
(game-time < 1500) | |
) | |
) | |
(or | |
(goal unit-goal knight) | |
(goal ranged-unit-type-goal monk) | |
) | |
(building-type-count-total siege-workshop < 1) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
(build siege-workshop) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(current-age >= castle-age) | |
(wood-amount >= 200) | |
(goal save-wood-goal 0) | |
(goal unit-goal cavalry-archer) | |
(building-type-count-total town-center == 1) | |
(building-type-count-total stable == 1) | |
(building-type-count-total archery-range > 3) | |
(building-type-count-total siege-workshop < 1) | |
(or | |
(up-compare-goal position-goal == flank) | |
(players-building-type-count focus-player watch-tower > 1) | |
) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(goal save-wood-goal 0) | |
(building-type-count town-center > 0) | |
(building-type-count-total monastery > 0) | |
(up-research-status c: ri-bodkin-arrow >= research-pending) | |
(strategic-number sn-military-level > 0) | |
(building-type-count-total siege-workshop < 1) | |
(can-build siege-workshop) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(or | |
(strategic-number sn-military-level > 1) | |
(goal team-coordination-goal 1) | |
) | |
(or | |
(and | |
(players-building-type-count any-enemy castle > 0) | |
(strategic-number sn-military-level > 2) | |
) | |
(and | |
(goal unit-goal default-ranged) | |
(up-compare-goal strategy-goal != boom) | |
) | |
) | |
(goal under-attack-goal 0) | |
(building-type-count-total siege-workshop < 1) | |
(can-build siege-workshop) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal control-goal shot) | |
(building-type-count-total town-center < tc-level-three) | |
(players-building-type-count focus-player castle > 0) | |
=> | |
(up-jump-rule 2) | |
) | |
(defrule | |
(current-age >= castle-age) | |
(wood-amount >= 200) | |
(goal strategy-goal rush) | |
(goal unit-goal eagle-warrior) | |
(or | |
(or | |
(strategic-number sn-archer-threat > 1) | |
(players-unit-type-count focus-player scorpion-line > 9) | |
) | |
(or | |
(building-type-count-total stone-wall-line > 10) | |
(players-building-type-count any-enemy castle > 0) | |
) | |
) | |
(building-type-count-total siege-workshop < 1) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(current-age >= castle-age) | |
(goal increase-town-size-goal 0) | |
(or | |
(building-type-count monastery > 2); get fast imp with mush | |
(or | |
(goal strategy-goal fast-imp) | |
(goal control-goal shot) | |
) | |
) | |
(building-type-count-total siege-workshop < 1) | |
(wood-amount >= 200) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(strategic-number sn-military-level > 1) | |
(current-age == castle-age) | |
(or (nor (goal strategy-goal fast-imp); don't delay fast imp or booms | |
(goal strategy-goal boom)) | |
(goal control-goal shot)); except if meso shot | |
(building-type-count siege-workshop > 0) | |
; (unit-type-count-total siege-unit-class == 0) | |
(unit-type-count-total battering-ram-line < 3) | |
=> | |
(set-strategic-number sn-resource-control battering-ram) | |
;debug (chat-to-player my-player-number "Saving resources for battering-ram") | |
) | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(current-age == castle-age) | |
(or (goal strategy-goal rush) | |
(goal strategy-goal flush)) | |
(strategic-number sn-military-level > 1) | |
(goal unit-goal default-ranged) | |
(building-type-count siege-workshop > 0) | |
(unit-type-count-total battering-ram-line < 2) | |
;(nand (unit-type-count spearman-line < 6) | |
; (strategic-number sn-cavalry-threat > 0)) | |
=> | |
(set-strategic-number sn-resource-control battering-ram) | |
;debug (chat-to-player my-player-number "Saving resources for battering-ram") | |
) | |
(defrule | |
(goal unit-goal knight) | |
(building-type-count siege-workshop > 0) | |
(strategic-number sn-archer-threat > 1) | |
(strategic-number sn-military-level < 0) | |
(unit-type-count-total mangonel-line < 1) | |
=> | |
(up-jump-rule 7) | |
) | |
(defrule | |
(goal forward-threat-goal 1) | |
(building-type-count siege-workshop > 0) | |
(or (unit-type-count-total battering-ram-line == 0) | |
(players-building-type-count focus-player watch-tower > 3)) | |
(unit-type-count-total battering-ram-line < 3) | |
(unit-type-count-total trebuchet-set == 0) | |
(nand (strategic-number sn-military-level < 0) | |
(goal under-attack-goal 1)) | |
(civilian-population > 22) | |
=> | |
(set-strategic-number sn-resource-control battering-ram) | |
;debug (chat-to-player my-player-number "Saving resources for battering-ram") | |
) | |
(defrule | |
(goal forward-threat-goal 1) | |
(building-type-count siege-workshop > 0) | |
(players-building-type-count focus-player watch-tower > 5) | |
(unit-type-count-total battering-ram-line < 6) | |
(unit-type-count-total trebuchet-set == 0) | |
(nand (strategic-number sn-military-level < 0) | |
(goal under-attack-goal 1)) | |
=> | |
(set-strategic-number sn-resource-control battering-ram) | |
;debug (chat-to-player my-player-number "Saving resources for battering-ram") | |
) | |
(defrule | |
(building-type-count siege-workshop > 0) | |
(unit-type-count-total battering-ram-line < 1) | |
(unit-type-count-total trebuchet-set == 0) | |
(goal team-coordination-goal 1); attacking | |
(players-building-type-count target-player stone-wall-line >= 8) | |
=> | |
(set-strategic-number sn-resource-control battering-ram) | |
;debug (chat-to-player my-player-number "Saving resources for battering-ram") | |
) | |
(defrule | |
(building-type-count siege-workshop > 0) | |
(unit-type-count battering-ram-line == 0) | |
(or (cc-players-unit-type-count any-enemy castle-arrow > 0) | |
(cc-players-unit-type-count any-enemy watch-tower-arrow > 0)) | |
(or (up-compare-goal under-attack-goal == 1) | |
(goal forward-threat-goal 1)) | |
(strategic-number sn-military-level >= 0) | |
=> | |
(set-strategic-number sn-resource-control battering-ram) | |
;debug (chat-to-player my-player-number "Saving resources for battering-ram") | |
) | |
(defrule | |
(strategic-number sn-resource-control < 3) | |
(goal control-goal shot) | |
(building-type-count siege-workshop > 0) | |
(unit-type-count-total battering-ram-line < 1) | |
(current-age == castle-age) | |
(strategic-number sn-military-level >= 0) | |
=> | |
(set-strategic-number sn-resource-control battering-ram) | |
;debug (chat-to-player my-player-number "Saving resources for battering-ram") | |
) | |
(defrule | |
(strategic-number sn-resource-control == battering-ram) | |
(wood-amount < 175) | |
=> | |
(set-goal save-wood-goal 1) | |
) | |
(defrule | |
(or (and (goal forward-threat-goal 1) | |
(unit-type-count battering-ram-line < 2)) | |
(strategic-number sn-resource-control == battering-ram)) | |
(can-train-with-escrow battering-ram-line) | |
=> | |
(release-escrow wood)(release-escrow gold) | |
(train battering-ram-line) | |
(set-strategic-number sn-resource-control 0) | |
) | |
(defrule | |
(goal increase-town-size-goal siege-workshop) | |
(or (or (goal unit-goal skirmisher) | |
(goal strategy-goal boom)) | |
(or (goal unit-goal my-unique-unit-line) | |
(goal unit-goal mix))) | |
(up-compare-goal forward-threat-goal != 1); don't build an aggressive siege-workshop with these strategies | |
(building-type-count-total town-center < tc-level-two) | |
=> | |
(set-goal increase-town-size-goal 0) | |
) | |
(defrule | |
(current-age >= castle-age) | |
(player-in-game any-ally) | |
(military-population > 15) | |
(nand (or (goal position-goal pocket) | |
(goal strategy-goal boom)) | |
(players-building-type-count any-ally siege-workshop > 0)) | |
(players-military-population target-player < 5) | |
(building-type-count-total siege-workshop < 1) | |
(wood-amount < 200) | |
=> | |
(set-goal save-wood-goal 1) | |
) | |
(defrule | |
(current-age >= castle-age) | |
(player-in-game any-ally) | |
(military-population > 12) | |
(or | |
(nor | |
(goal position-goal pocket) | |
(goal strategy-goal boom) | |
) | |
(players-building-type-count target-player watch-tower > 0) | |
) | |
(players-military-population target-player < 5) | |
(building-type-count-total siege-workshop < 1) | |
(wood-amount >= 200) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-goal 3) | |
) | |
#load-if-not-defined DEATH-MATCH | |
(defrule | |
(building-type-count town-center > 0) | |
(current-age >= castle-age) | |
(goal increase-town-size-goal 0) | |
(goal unit-goal archer) | |
(or | |
(and | |
(goal control-goal aggressive-rush) | |
(civ-selected mayan) | |
) | |
(and | |
(players-building-type-count focus-player watch-tower > 0) | |
(goal strategy-goal rush) | |
) | |
) | |
(building-type-count-total siege-workshop < 1) | |
(wood-amount >= 200) | |
(up-compare-goal position-goal == flank) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(current-age >= castle-age) | |
(goal increase-town-size-goal 0) | |
(goal save-wood-goal 0) | |
(building-type-count-total town-center >= tc-level-four) | |
(or | |
(goal ranged-unit-type-goal scorpion) | |
(up-research-status c: ri-heavy-scorpion >= research-pending) | |
) | |
(building-type-count-total siege-workshop < 3) | |
(wood-amount >= 400) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
(defrule | |
(strategic-number sn-maximum-town-size >= 60) | |
(goal increase-town-size-goal 0) | |
(goal save-wood-goal 0) | |
(building-type-count-total town-center >= tc-level-four) | |
(wood-amount > 1400) | |
(up-research-status c: ri-siege-ram >= research-pending) | |
(building-type-count-total siege-workshop < 3) | |
=> | |
(set-goal forward-goal siege-workshop) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(goal increase-town-size-goal 0) | |
(current-age >= castle-age) | |
(goal save-wood-goal 0) | |
(building-type-count-total town-center >= tc-level-four) | |
(or | |
(or | |
(building-type-count-total town-center >= tc-level-five) | |
(unit-type-count-total villager >= max-civ) | |
) | |
(and | |
(up-compare-goal strategy-goal != boom) | |
(population-cap < 250) | |
) | |
) | |
(building-type-count-total siege-workshop < 1) | |
(wood-amount >= 200) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(current-age >= castle-age) | |
(strategic-number sn-resource-control != ri-elite-skirmisher) | |
(goal strategy-goal rush) | |
(goal unit-goal scorpion) | |
(building-type-count-total siege-workshop < 3) | |
(wood-amount >= 200) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-not-defined UP-POCKET-POSITION | |
#load-if-not-defined GOTHIC-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(current-age >= castle-age) | |
(strategic-number sn-resource-control != ri-elite-skirmisher) | |
(strategic-number sn-archer-threat > 0) | |
(strategic-number sn-military-level < 0) | |
(building-type-count-total town-center >= tc-level-two) | |
(building-type-count-total siege-workshop < 1) | |
(wood-amount >= 200) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#else | |
(defrule | |
(goal increase-town-size-goal 0) | |
(current-age >= castle-age) | |
(strategic-number sn-resource-control != ri-elite-skirmisher) | |
(goal unit-goal scorpion) | |
(building-type-count-total town-center >= tc-level-two) | |
(building-type-count-total siege-workshop < 1) | |
(wood-amount >= 200) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#load-if-defined CELTIC-CIV | |
(defrule | |
(current-age >= castle-age) | |
(goal increase-town-size-goal 0) | |
(building-type-count-total town-center >= tc-level-two) | |
(goal save-wood-goal 0) | |
(or | |
(building-type-count-total town-center >= tc-level-four) | |
(and | |
(or | |
(goal unit-goal knight) | |
(building-type-count-total town-center >= tc-level-three) | |
) | |
(building-type-count-total siege-workshop == 0) | |
) | |
) | |
(building-type-count-total siege-workshop < 3) | |
(wood-amount >= 200) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#load-if-defined SLAVIC-CIV | |
(defrule | |
(goal save-wood-goal 0) | |
(current-age >= castle-age) | |
(goal increase-town-size-goal 0) | |
(building-type-count-total town-center >= tc-level-two) | |
(or | |
(building-type-count-total town-center >= tc-level-three) | |
(building-type-count-total siege-workshop == 0) | |
) | |
(or | |
(building-type-count-total town-center >= tc-level-four) | |
(building-type-count-total siege-workshop == 1) | |
) | |
(building-type-count-total siege-workshop < 3) | |
(wood-amount >= 200) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(strategic-number sn-current-age >= ci-transit) | |
(unit-type-count scorpion-line > 9) | |
(up-research-status c: ri-heavy-scorpion < research-pending) | |
(goal unit-goal scorpion) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
(set-goal save-wood-goal 1) | |
) | |
#end-if | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(game-time > 120) | |
(up-compare-goal increase-town-size-goal != siege-workshop) | |
(building-type-count-total siege-workshop == 0) | |
(wood-amount >= 200) | |
(current-age == castle-age) | |
=> | |
(set-goal increase-town-size-goal siege-workshop) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(goal increase-town-size-goal siege-workshop) | |
(up-pending-objects c: siege-workshop > 0) | |
=> | |
(set-goal increase-town-size-goal 0) | |
) | |
(defrule | |
(goal increase-town-size-goal siege-workshop) | |
(can-build siege-workshop) | |
=> | |
(build siege-workshop) | |
(set-goal increase-town-size-goal 2) | |
) | |
#end-if ; NOT WONDER RACE | |
(defrule | |
(game-time > 20) | |
(or | |
(or | |
(map-type scandanavia) | |
(death-match-game) | |
) | |
(and | |
(or | |
(dropsite-min-distance boar-hunting < 30) | |
(dropsite-min-distance deer-hunting < 32) | |
) | |
(unit-type-count-total villager > 14) | |
) | |
) | |
(research-available ri-loom) | |
=> | |
(research ri-loom) | |
(set-goal need-loom-goal 1) | |
) | |
(defrule | |
(or (players-military-population any-enemy >= 3); loom fast when enemy looks dangerous | |
(or (current-age >= castle-age); loom anyways at some point | |
(or (goal need-loom-goal 1); loom needed before hunting | |
(and (up-pending-objects c: villager == 0) | |
(food-amount < 50))))) | |
(can-research ri-loom) | |
=> | |
(research ri-loom) | |
) | |
(defrule | |
(or (population >= 6) | |
(building-type-count-total house <= 0)) | |
(housing-headroom == 0) | |
(can-research ri-loom) | |
=> | |
(research ri-loom) | |
) | |
(defrule | |
(building-type-count-total town-center > 0) | |
(or | |
(housing-headroom < housing-headroom1); too late actually, but if we have no food we can't train vils anyways. | |
(and | |
(population > 10) | |
(housing-headroom < 4) | |
) | |
) | |
(population-headroom > 0) | |
=> | |
(set-goal housing-goal 1) | |
) | |
#load-if-not-defined WONDER-RACE | |
(defrule | |
(housing-headroom < 10) | |
(or | |
(goal strategy-goal flush) | |
(building-type-count-total blacksmith > 0) | |
) | |
(nand | |
(goal unit-goal my-unique-unit-line) | |
(strategic-number sn-current-age == fc-transit); build additonal houses in castle age to get builder for the castle | |
) | |
(strategic-number sn-current-age >= feudal) | |
(population < eighty-five-percent-pop) | |
(housing-headroom < housing-headroom2) | |
(population-headroom > 0) | |
=> | |
(set-goal housing-goal 1) | |
) | |
(defrule | |
(or | |
(population > 60) | |
(and | |
(strategic-number sn-current-age >= castle) | |
(or | |
(goal unit-goal eagle-warrior) | |
(goal unit-goal archer) | |
) | |
) | |
) | |
(strategic-number sn-current-age >= feudal) | |
(or | |
(housing-headroom < housing-headroom2) | |
(population > seventy-five-percent-pop) | |
) | |
(population-headroom > 0) | |
(nand | |
(goal strategy-goal boom) | |
(building-type-count-total town-center < 2) | |
) | |
=> | |
(set-goal housing-goal 1) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(building-type-count town-center == 0) | |
(or | |
(or | |
(civ-selected hun); on LN, collect more wood for houses or be huns | |
(civ-selected chinese) | |
) | |
(or | |
(building-type-count-total house > 0) | |
(wood-amount > 300) | |
) | |
) | |
=> | |
(up-assign-builders c: 621 c: 6) | |
(set-goal housing-goal 0) | |
) | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(building-type-count-total house > 1) | |
=> | |
(set-goal housing-goal 0) | |
) | |
#end-if | |
#load-if-not-defined HUN-CIV | |
#load-if-not-defined CHINESE-CIV | |
#load-if-not-defined SPANISH-CIV ; speed bonus on buildings | |
(defrule | |
(building-type-count-total house == 0) | |
(goal housing-goal 1) | |
(or (or (civ-selected aztec) | |
(civ-selected mayan)) | |
(not (map-type scandanavia))); go for early loom | |
(nor (up-research-status c: ri-treadmill-crane >= research-pending) | |
(and (death-match-game) | |
(starting-age == dark-age))) | |
=> | |
(up-assign-builders c: house c: 2) | |
(disable-self) | |
) | |
(defrule | |
(building-type-count house > 0) | |
=> | |
(up-assign-builders c: house c: 1) | |
(disable-self) | |
) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(goal housing-goal 1) | |
(or | |
(up-pending-objects c: house < 1) | |
(and | |
(and | |
(population > 90) | |
(housing-headroom < 5) | |
) | |
(or | |
(up-pending-objects c: house < 2) | |
(population > pop-house) | |
) | |
) | |
) | |
(up-pending-objects c: house < 3) | |
(can-build house) | |
=> | |
(build house) | |
(set-goal housing-goal 0) | |
(set-goal increase-town-size-goal house) | |
) | |
(defrule | |
(up-pending-objects c: house == 0) | |
(housing-headroom <= 4) | |
(population-headroom > 0) | |
(or (building-type-count-total dock >= 1) | |
(and (goal strategy-goal drush) | |
(building-type-count-total barracks >= 1))) | |
(building-type-count-total town-center >= 1) | |
(strategic-number sn-current-age == dark) | |
(can-build house) | |
=> | |
(build house) | |
(set-goal housing-goal 0) | |
(set-goal increase-town-size-goal house) | |
) | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(goal housing-goal 1) | |
(or | |
(building-type-count-total barracks > 0) | |
(building-type-count-total stable > 0) | |
) | |
(or | |
(up-pending-objects c: house < 2) | |
(current-age >= feudal-age) | |
) | |
(or | |
(up-pending-objects c: house < 3) | |
(starting-age == post-imperial-age) | |
) | |
(up-pending-objects c: house < 5) | |
(can-build house) | |
=> | |
(build house) | |
(set-goal housing-goal 0) | |
(set-goal increase-town-size-goal house) | |
) | |
#end-if | |
(defrule | |
(goal housing-goal 1) | |
(population > 150) | |
(population-cap >= 225) | |
(up-pending-objects c: house < 5) | |
(can-build house) | |
=> | |
(build house) | |
(set-goal housing-goal 0) | |
(set-goal increase-town-size-goal house) | |
) | |
#load-if-not-defined WONDER-RACE | |
(defrule | |
(current-age == dark-age) | |
(civilian-population < max-civ); difficulty | |
(building-type-count town-center > 1); double arabia | |
(unit-type-count villager < 40) | |
(food-amount < 420) | |
(can-train villager) | |
=> | |
(disable-timer FDrop) | |
(enable-timer FDrop 21) | |
(train villager) | |
(set-strategic-number sn-total-number-explorers 2) | |
(set-strategic-number sn-number-explore-groups 2) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count-total villager > 24) | |
(or (unit-type-count-total villager > 25) | |
(or (goal unit-goal archer) | |
(goal unit-goal skirmisher))) | |
(goal strategy-goal flush) | |
(food-amount > 440); 460 | |
=> | |
(set-goal train-civ-goal -1) | |
) | |
#load-if-not-defined DIFFICULTY-EASIEST; test | |
;#load-if-defined DEATH-MATCH | |
(defrule | |
(or (food-amount >= 1400) | |
(and (food-amount >= 820) | |
(unit-type-count-total villager >= 15))) | |
(can-research feudal-age) | |
=> | |
(set-strategic-number sn-current-age df-transit) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-maximum-town-size 12) | |
(set-strategic-number sn-maximum-food-drop-distance 15) | |
(set-strategic-number sn-maximum-wood-drop-distance 15) | |
; (chat-to-allies-using-id 8101); "Advance to Feudal Age" | |
(research feudal-age) | |
) | |
;#end-if | |
(defrule | |
(or (unit-type-count-total villager >= 31) | |
(civilian-population >= max-civ)) | |
(up-pending-objects c: villager <= 0) | |
(can-research feudal-age) | |
=> | |
(set-strategic-number sn-current-age df-transit) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-maximum-town-size 10) | |
(set-strategic-number sn-maximum-food-drop-distance 15) | |
; (chat-to-allies-using-id 8101); "Advance to Feudal Age" | |
(research feudal-age) | |
) | |
(defrule | |
(unit-type-count-total villager >= villager-feudal) | |
(or (unit-type-count fishing-ship > 3) | |
(map-type yucatan)) | |
(can-research feudal-age) | |
=> | |
(set-strategic-number sn-current-age df-transit) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-maximum-town-size 10) | |
(set-strategic-number sn-maximum-food-drop-distance 15) | |
; (chat-to-allies-using-id 8101); "Advance to Feudal Age" | |
(research feudal-age) | |
) | |
(defrule | |
(civilian-population >= villager-flush) | |
(or (unit-type-count-total villager >= 25) | |
(up-compare-goal unit-goal != militiaman-line)) | |
(goal strategy-goal flush) | |
(can-research feudal-age) | |
=> | |
(set-strategic-number sn-current-age df-transit) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-maximum-town-size 10) | |
(set-strategic-number sn-maximum-food-drop-distance 15) | |
; (chat-to-allies-using-id 8101); "Advance to Feudal Age" | |
(research feudal-age) | |
) | |
(defrule | |
(unit-type-count villager >= dark-age-villager) | |
(or (food-amount >= 620) | |
(or (unit-type-count-total villager >= 30) | |
(goal control-goal shot))) | |
(up-compare-goal strategy-goal != fast-imp) | |
(can-research feudal-age) | |
=> | |
(set-strategic-number sn-current-age df-transit) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-maximum-town-size 10) | |
(set-strategic-number sn-maximum-food-drop-distance 15) | |
; (chat-to-allies-using-id 8101); "Advance to Feudal Age" | |
(research feudal-age) | |
) | |
(defrule | |
(or (unit-type-count villager >= 33) | |
(goal unit-goal wonder)) | |
(unit-type-count villager >= villager-wonder-dark) | |
(goal strategy-goal fast-imp) | |
(can-research feudal-age) | |
=> | |
(set-strategic-number sn-current-age df-transit) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-maximum-town-size 10) | |
(set-strategic-number sn-maximum-food-drop-distance 15) | |
; (chat-to-allies-using-id 8101); "Advance to Feudal Age" | |
(research feudal-age) | |
) | |
(defrule | |
(or (or (game-type == 8) | |
(difficulty != hardest)) | |
(or (population-cap == 25) | |
(starting-resources != low-resources))) | |
(unit-type-count-total villager >= villager-feudal) | |
(can-research feudal-age) | |
=> | |
(set-strategic-number sn-current-age df-transit) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-maximum-food-drop-distance 15) | |
(set-strategic-number sn-maximum-wood-drop-distance 15) | |
; (chat-to-allies-using-id 8101); "Advance to Feudal Age" | |
(research feudal-age) | |
) | |
#else; test | |
(defrule | |
(or (players-current-age any-enemy >= feudal-age) | |
(or (players-current-age any-ally >= feudal-age) | |
(not (player-in-game any-human)))) | |
(can-research feudal-age) | |
=> | |
(set-strategic-number sn-current-age df-transit) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-maximum-food-drop-distance 15) | |
(set-strategic-number sn-maximum-wood-drop-distance 15) | |
; (chat-to-allies-using-id 8101); "Advance to Feudal Age" | |
(research feudal-age) | |
) | |
#end-if; test | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
(defrule | |
(current-age == feudal-age) | |
(unit-type-count villager >= 15); pretend dark age if feudal age start | |
=> | |
(enable-timer lumber-timer 60) | |
(set-strategic-number sn-maximum-town-size 10) | |
(set-strategic-number sn-current-age feudal) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-minimum-number-hunters 0) | |
(disable-self)) | |
#end-if | |
#end-if | |
(defrule | |
(or (difficulty == easiest) | |
(difficulty == easy)) | |
(current-age == feudal-age) | |
(unit-type-count villager >= 5); pretend dark age if feudal age start | |
=> | |
(enable-timer lumber-timer 60) | |
(set-strategic-number sn-maximum-town-size 10) | |
(set-strategic-number sn-current-age feudal) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-minimum-number-hunters 0) | |
(disable-self)) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
=> | |
(up-assign-builders c: bombard-tower c: 3) | |
(up-assign-builders c: castle c: 4) | |
(up-assign-builders c: archery-range c: 1) | |
(up-assign-builders c: stable c: 1) | |
(up-assign-builders c: market c: 1) | |
(up-assign-builders c: mining-camp c: 1) | |
) | |
#load-if-not-defined WONDER-RACE | |
#load-if-defined LOW-RESOURCES-START | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(or | |
(gold-amount < 200) | |
(or | |
(and | |
(goal unit-goal eagle-warrior) | |
(up-compare-goal position-goal == flank) | |
) | |
(goal unit-goal monk) | |
) | |
) | |
(food-amount >= 700) | |
(nor | |
(goal strategy-goal boom) | |
(goal control-goal shot) | |
) | |
(can-sell-commodity stone) | |
=> | |
(sell-commodity stone) | |
) | |
#end-if | |
#load-if-defined SARACEN-CIV | |
(defrule | |
(game-time < 1800); don't do this late game | |
(nor | |
(goal strategy-goal sling) | |
(and | |
(goal unit-goal my-unique-unit-line) | |
(building-type-count castle == 0) | |
) | |
) | |
(commodity-selling-price stone > 95) | |
(or | |
(wood-amount < 300); prevent sell/buy for TC loop | |
(stone-amount >= 200) | |
) | |
(can-sell-commodity stone) | |
=> | |
(sell-commodity stone) | |
) | |
#end-if | |
(defrule | |
(current-age >= imperial-age) | |
(game-time > 1800) | |
(current-age-time > 180) | |
(gold-amount > 900) | |
(stone-amount < 650) | |
(goal under-attack-goal 0) | |
(building-type-count-total castle < 4) | |
(or | |
(up-research-status c: my-unique-unit-upgrade >= research-pending) | |
(building-type-count-total castle < 2) | |
) | |
(or | |
(gold-amount > 1600) | |
(building-type-count-total castle == 0) | |
) | |
(can-buy-commodity stone) | |
=> | |
(buy-commodity stone) | |
(chat-local-to-self "6 buy stone for a castle") | |
) | |
(defrule | |
(strategic-number sn-resource-control != ri-heresy) | |
(game-time < 1800) | |
(goal monk-threat-goal 1) | |
(or | |
(and | |
(research-available ri-light-cavalry) | |
(gold-amount >= 200) | |
) | |
(unit-type-count scout-cavalry-line < 6) | |
) | |
(goal enemy-goal rush) | |
(food-amount < 80) | |
(building-type-count stable > 0) | |
(can-buy-commodity food) | |
=> | |
(buy-commodity food) | |
) | |
(defrule | |
;(or (cc-players-unit-type-count 0 tree-class < 150) | |
(dropsite-min-distance wood > 20);) | |
(wood-amount < 200) | |
(or | |
(gold-amount > 200) | |
(wood-amount < 60) | |
) | |
(can-buy-commodity wood) | |
=> | |
(buy-commodity wood) | |
(chat-to-player my-player-number "buy wood") | |
) | |
(defrule | |
(game-time < 1500) | |
(wood-amount < 120) | |
(gold-amount > 350) | |
(or | |
(unit-type-count-total 219 >= 1) | |
(unit-type-count-total 228 >= 1); dead lumberjacks | |
) | |
(can-buy-commodity wood) | |
=> | |
(buy-commodity wood) | |
(chat-to-player my-player-number "buy wood") | |
) | |
#load-if-not-defined AZTEC-CIV | |
#load-if-not-defined MAYAN-CIV | |
#load-if-not-defined INCAN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 2) | |
(goal monk-threat-goal 1) | |
(building-type-count stable > 0) | |
(building-type-count market > 0) | |
(or | |
(unit-type-count scout-cavalry-line < 6) | |
(research-available ri-light-cavalry) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#load-if-defined SARACEN-CIV | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal rush) | |
(or | |
(food-amount < 650) | |
(gold-amount > 320) | |
) | |
(food-amount < 800) | |
(commodity-buying-price food < 120) | |
(can-buy-commodity food) | |
=> | |
(buy-commodity food) | |
(chat-to-player my-player-number "3 Special Saracen Market Rule") | |
) | |
(defrule | |
(or | |
(game-time < 2100) | |
(research-available ri-horse-collar) | |
) | |
(or | |
(food-amount < 120) | |
(and | |
(up-compare-goal unit-goal != monk) | |
(and | |
(food-amount < 200) | |
(gold-amount > 275) | |
) | |
) | |
) | |
(gold-amount > 200) | |
(commodity-buying-price food < 140) | |
(can-buy-commodity food) | |
=> | |
(buy-commodity food) | |
(chat-to-player my-player-number "3 Special Saracen Market Rule") | |
) | |
(defrule | |
(game-time < 1500) | |
(building-type-count-total stable < 2) | |
(building-type-count-total archery-range < 2) | |
(wood-amount < 200) | |
(or | |
(wood-amount < 120) | |
(gold-amount > 500) | |
) | |
(gold-amount > 200) | |
(or | |
(unit-type-count-total 219 >= 1) | |
(unit-type-count-total 228 >= 1); dead lumberjacks | |
) | |
(commodity-buying-price wood < 120) | |
(can-buy-commodity wood) | |
=> | |
(buy-commodity wood) | |
(chat-to-player my-player-number "4 Special Saracen Market Rule") | |
) | |
#end-if | |
(defrule | |
(goal train-civ-goal 1) | |
(building-type-count-total town-center >= tc-level-two) | |
(gold-amount > 250) | |
(food-amount < 50) | |
(civilian-population < max-civ) | |
(civilian-population < 85) | |
(commodity-buying-price food < 150) | |
(can-buy-commodity food) | |
=> | |
(buy-commodity food) | |
(chat-to-player my-player-number "3 buy food for villagers") | |
) | |
(defrule | |
(strategic-number sn-resource-control != ri-heresy) | |
(gold-amount > 500) | |
(food-amount < 200) | |
(unit-type-count trade-cart > 15) | |
(commodity-buying-price food < 70) | |
(can-buy-commodity food) | |
=> | |
(buy-commodity food) | |
(chat-to-player my-player-number "3 buy cheap food with trade cart gold") | |
) | |
#load-if-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(can-sell-commodity stone) | |
(stone-amount > 750) | |
(food-amount > 2000) | |
(wood-amount > 2000) | |
(gold-amount < 1000) | |
(commodity-selling-price stone > 40) | |
(building-type-count-total castle > 1) | |
=> | |
(sell-commodity stone) | |
) | |
#end-if | |
#end-if ; NOT WONDER-RACE | |
#load-if-defined DEATH-MATCH | |
#load-if-not-defined BRITON-CIV | |
#load-if-not-defined MONGOL-CIV | |
#load-if-not-defined KOREAN-CIV | |
#load-if-not-defined CHINESE-CIV | |
#load-if-not-defined MAYAN-CIV | |
#load-if-not-defined ISLANDS-MAP | |
#load-if-not-defined TEAM-ISLANDS-MAP | |
(defrule | |
(can-sell-commodity wood) | |
(commodity-selling-price wood > 40) | |
=> | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood)(disable-self) | |
) | |
(defrule | |
(can-sell-commodity wood) | |
(commodity-selling-price wood > 30) | |
=> | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood) | |
(sell-commodity wood)(disable-self) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(can-sell-commodity stone) | |
(commodity-selling-price stone > 70) | |
=> | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone)(disable-self)) | |
(defrule | |
(can-sell-commodity stone) | |
(commodity-selling-price stone > 70) | |
=> | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone)(disable-self)) | |
#else | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(can-sell-commodity stone) | |
(commodity-selling-price stone > 70) | |
=> | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone)(disable-self)) | |
#end-if | |
#end-if | |
#else | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(can-sell-commodity stone) | |
(commodity-selling-price stone > 70) | |
=> | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone) | |
(sell-commodity stone)(disable-self) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(research-available castle-age) | |
(strategic-number sn-current-age >= fc-transit) | |
=> | |
(set-strategic-number sn-current-age feudal) | |
(chat-to-player my-player-number "castle-age research failed!"); castle research failed, set our age-tracking back | |
) | |
#load-if-not-defined DIFFICULTY-EASIEST; test | |
(defrule | |
(can-research castle-age) | |
=> | |
(set-strategic-number sn-current-age fc-transit) | |
(set-strategic-number sn-maximum-town-size 10) | |
(research castle-age) | |
; (chat-to-allies-using-id 8102); "Advance to Castle Age" | |
) | |
#else; test | |
(defrule | |
(or (players-current-age any-enemy >= feudal-age) | |
(or (players-current-age any-ally >= feudal-age) | |
(not (player-in-game any-human)))) | |
(can-research castle-age) | |
=> | |
(set-strategic-number sn-current-age fc-transit) | |
(set-strategic-number sn-maximum-town-size 10) | |
(research castle-age) | |
; (chat-to-allies-using-id 8102); "Advance to Castle Age" | |
) | |
#end-if; test | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
(defrule | |
(current-age == castle-age) | |
(unit-type-count villager >= 15) | |
=> | |
(set-strategic-number sn-camp-max-distance castle-age-camp-distance) | |
(set-strategic-number sn-maximum-fish-boat-drop-distance -1) | |
(set-strategic-number sn-maximum-town-size 12) | |
(set-strategic-number sn-maximum-hunt-drop-distance 18) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-wood-dropsite-distance 3) | |
(set-strategic-number sn-current-age castle) | |
(disable-self)) | |
#end-if | |
#end-if | |
(defrule | |
(or (difficulty == easiest) | |
(difficulty == easy)) | |
(current-age == castle-age) | |
(unit-type-count villager >= 15) | |
=> | |
(set-strategic-number sn-camp-max-distance castle-age-camp-distance) | |
(set-strategic-number sn-maximum-fish-boat-drop-distance -1) | |
(set-strategic-number sn-maximum-town-size 12) | |
(set-strategic-number sn-maximum-hunt-drop-distance 18) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-wood-dropsite-distance 3) | |
(set-strategic-number sn-current-age castle) | |
(disable-self)) | |
(defrule | |
(or (strategic-number sn-gold-dropsite-distance >= 40); reset distances after forced camp | |
(strategic-number sn-stone-dropsite-distance >= 40)) | |
=> | |
(set-strategic-number sn-gold-dropsite-distance 3) | |
(set-strategic-number sn-stone-dropsite-distance 3) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
) | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
#load-if-not-defined DEATH-MATCH | |
(defrule | |
(or (and (goal strategy-goal flush) | |
(wood-amount > 420)) | |
(and (stone-amount == 0); if there are many players selling stone for castle age advance, not everyone gets enough gold | |
(and (gold-amount < 200) | |
(food-amount > 750)))) | |
(research-available castle-age) | |
(strategic-number sn-current-age == feudal) | |
(commodity-selling-price wood > 40) | |
(can-sell-commodity wood) | |
=> | |
(sell-commodity wood) | |
(chat-to-player my-player-number "sell excess wood") | |
) | |
#end-if | |
(defrule | |
(or (research-available imperial-age) | |
(current-age >= imperial-age)) | |
(wood-amount > 430) | |
(commodity-selling-price wood > 40) | |
(or (building-type-count town-center >= tc-level-four) | |
(and (strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(stone-amount < 50))) | |
(cc-players-unit-type-count 0 tree-class > 150) | |
(gold-amount < 800) | |
(can-sell-commodity wood) | |
=> | |
(sell-commodity wood) | |
(chat-to-player my-player-number "sell excess wood") | |
) | |
#end-if | |
(defrule | |
(current-age >= imperial-age) | |
(food-amount > 2000) | |
(gold-amount < 1250) | |
(population > eighty-five-percent-pop) | |
(can-sell-commodity food) | |
(commodity-buying-price wood < 120); don't run into a buy wood, farm and sell food cycle, it's not worth | |
=> | |
(sell-commodity food) | |
(chat-to-player my-player-number "sell excess food") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(food-amount < 2000) | |
(wood-amount > 2000) | |
(cc-players-unit-type-count 0 tree-class > 150) | |
(dropsite-min-distance wood < 7) | |
(gold-amount < 1200) | |
(population > eighty-five-percent-pop) | |
(can-sell-commodity wood) | |
=> | |
(sell-commodity wood) | |
(chat-to-player my-player-number "sell excess wood") | |
) | |
(defrule | |
(current-age >= imperial-age) | |
(food-amount > 600) | |
(or (and (commodity-selling-price food > 40) | |
(gold-amount < 150)) | |
(and (food-amount > 1650) | |
(gold-amount < 800))) | |
(commodity-buying-price wood < 135) | |
(can-sell-commodity food) | |
=> | |
(sell-commodity food) | |
(chat-to-player my-player-number "sell excess food") | |
) | |
(defrule | |
(or (strategic-number sn-minimum-water-body-size-for-dock < water-islands); don't sell too much on water maps, we can't gatherer on other islands | |
(commodity-selling-price wood > 40)) | |
(cc-players-unit-type-count 0 tree-class > 100) | |
(food-amount < 2000); sell food first | |
(wood-amount > 1200) | |
(dropsite-min-distance wood < 7) | |
(gold-amount < 800) | |
(or (starting-age < post-imperial-age) | |
(or (commodity-selling-price wood > 40) | |
(food-amount < 800))) | |
(can-sell-commodity wood) | |
=> | |
(sell-commodity wood) | |
(chat-to-player my-player-number "sell excess wood") | |
) | |
(defrule | |
(strategic-number sn-resource-control == ri-heresy) | |
(wood-amount > 220) | |
(gold-amount < 1100) | |
(commodity-selling-price wood > 20) | |
(can-sell-commodity wood) | |
=> | |
(sell-commodity wood) | |
(chat-to-player my-player-number "emergency sell wood - need ri-heresy") | |
) | |
(defrule | |
(strategic-number sn-resource-control == ri-heresy) | |
(food-amount > 300) | |
(gold-amount < 1100) | |
(commodity-selling-price food > 20) | |
(up-research-status c: ri-light-cavalry < research-pending) | |
(can-sell-commodity food) | |
=> | |
(sell-commodity food) | |
(chat-to-player my-player-number "emergency sell food - need ri-heresy") | |
) | |
(defrule | |
(research-available imperial-age) | |
(civilian-population >= max-civ) | |
(players-unit-type-count every-ally villager >= 95) | |
(food-amount < 500) | |
(gold-amount >= 800) | |
=> | |
(set-goal tribute-goal 3) | |
) | |
(defrule | |
(strategic-number sn-resource-control != ri-heresy) | |
(goal under-attack-goal 1) | |
(civilian-population < fourty-percent-pop) | |
(food-amount < 100) | |
(gold-amount > 350) | |
(commodity-buying-price food < 170) | |
(can-buy-commodity food) | |
=> | |
(buy-commodity food) | |
(set-goal tribute-goal 3) | |
) | |
(defrule | |
(wood-amount >= 275) | |
(stone-amount < 100) | |
(building-type-count-total town-center == 0) | |
(can-buy-commodity stone) | |
(unit-type-count villager > 0) | |
=> | |
(buy-commodity stone) | |
) | |
(defrule | |
(wood-amount > 375) | |
(stone-amount < 100) | |
(gold-amount < 300) | |
(unit-type-count villager > 0) | |
(building-type-count-total town-center == 0) | |
(building-type-count market > 0) | |
=> | |
(release-escrow wood) | |
(sell-commodity wood) | |
) | |
(defrule | |
(wood-amount >= 275) | |
(stone-amount < 100) | |
(building-type-count-total town-center == 0) | |
(unit-type-count villager > 0) | |
=> | |
(set-goal tribute-goal 6) | |
) | |
(defrule | |
(wood-amount < 275) | |
(stone-amount >= 100) | |
(building-type-count-total town-center == 0) | |
(unit-type-count villager > 0) | |
=> | |
(set-goal tribute-goal 4) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 2) | |
(wood-amount >= 330) | |
(stone-amount < 100) | |
(civilian-population < 80) | |
(or (current-age-time > 300) | |
(gold-amount > 400)) | |
(current-age >= castle-age) | |
(building-type-count-total town-center < 3) | |
(up-compare-goal strategy-goal != fast-imp) | |
(up-pending-objects c: town-center == 0) | |
(can-buy-commodity stone) | |
=> | |
(buy-commodity stone) | |
(chat-to-player my-player-number "6") | |
) | |
(defrule | |
(stone-amount < 650) | |
(civilian-population < 80) | |
(current-age >= imperial-age) | |
(building-type-count-total castle == 0) | |
(gold-amount > 400) | |
(unit-type-count trade-cart > 4) | |
(or (dropsite-min-distance stone > 20) | |
(dropsite-min-distance stone < 0)) | |
(can-buy-commodity stone) | |
=> | |
(buy-commodity stone) | |
(chat-to-player my-player-number "6") | |
) | |
(defrule | |
(research-available imperial-age) | |
(strategic-number sn-current-age >= ci-transit) | |
=> | |
(set-strategic-number sn-current-age castle) | |
(chat-to-player my-player-number "imperial-age research failed!"); imperial research failed, set our age-tracking back | |
) | |
(defrule | |
(research-available imperial-age) | |
(civilian-population > 95) | |
(game-time >= 2400) | |
(or (population > seventy-five-percent-pop) | |
(population-cap >= 250)) | |
(population > sixty-percent-pop) | |
=> | |
(set-escrow-percentage food 10)(set-escrow-percentage gold 20) | |
) | |
#load-if-not-defined DIFFICULTY-EASIEST; test | |
(defrule | |
(can-research-with-escrow imperial-age) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(set-escrow-percentage food 0)(set-escrow-percentage gold 0) | |
(set-strategic-number sn-current-age ci-transit) | |
(set-strategic-number sn-percent-building-cancellation 75) | |
; (chat-to-allies-using-id 8103); "Advance to Imperial Age" | |
(research imperial-age) | |
) | |
#else; test | |
(defrule | |
(or (players-current-age any-enemy >= feudal-age) | |
(or (players-current-age any-ally >= feudal-age) | |
(not (player-in-game any-human)))) | |
(can-research-with-escrow imperial-age) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(set-escrow-percentage food 0)(set-escrow-percentage gold 0) | |
(set-strategic-number sn-current-age ci-transit) | |
(set-strategic-number sn-percent-building-cancellation 75) | |
; (chat-to-allies-using-id 8103); "Advance to Imperial Age" | |
(research imperial-age) | |
) | |
#end-if; test | |
(defrule | |
(or | |
(population < sixty-percent-pop) | |
(military-population < 20) | |
) | |
(goal under-attack-goal 1) | |
(strategic-number sn-military-level < 0) | |
=> | |
(release-escrow food)(release-escrow gold) | |
) | |
(defrule | |
(or (unit-type-count villager >= 15) | |
(or (death-match-game) | |
(or (difficulty == easiest) | |
(or (difficulty == easy) | |
(and (starting-resources == high-resources) | |
(game-time > 90)))))) | |
(current-age == imperial-age) | |
=> | |
(set-strategic-number sn-current-age imperial) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(disable-self)) | |
;================================================================ | |
; Stone in general | |
;================================================================ | |
(defrule | |
(unit-type-count 124 == 0); stone-miners | |
(unit-type-count 220 == 0) | |
(building-type-count-total town-center <= 0) | |
(wood-amount >= 275) | |
(stone-amount < 100) | |
(can-buy-commodity stone) | |
=> | |
(chat-local-to-self "Buying stone for a towncenter.") | |
(buy-commodity stone)) | |
;================================================================ | |
#load-if-not-defined WONDER-RACE | |
#load-if-not-defined HUN-CIV | |
(defrule | |
(strategic-number sn-military-level >= 0) | |
(building-type-count-total castle == 0) | |
(stone-amount < castle-stone) | |
(gold-amount > 300) | |
(or (strategic-number sn-current-age >= imperial) | |
(gold-amount > 1100)) | |
; (building-available castle) | |
(can-buy-commodity stone) | |
=> | |
(chat-local-to-self "Buying stone for a castle.") | |
(buy-commodity stone)) | |
(defrule | |
(strategic-number sn-military-level >= 0) | |
(building-type-count-total castle < 3) | |
(or (building-type-count-total castle < 2) | |
(gold-amount > 2000)) | |
(stone-amount < castle-stone) | |
(gold-amount > 800); 300 in the rule above | |
(strategic-number sn-current-age >= imperial) | |
; (building-available castle) | |
(commodity-buying-price stone < 600) | |
(can-buy-commodity stone) | |
=> | |
(chat-local-to-self "Buying stone for a castle.") | |
(buy-commodity stone)) | |
#end-if | |
#end-if | |
;================================================================ | |
(defrule | |
(building-type-count-total castle < 5) | |
(stone-amount < castle-stone) | |
(or (gold-amount > 8000) | |
(and (or (unit-type-count-total trade-cart >= 15) | |
(unit-type-count-total trade-cog >= 15)) | |
(gold-amount > 5000))) | |
; (building-available castle) | |
(commodity-buying-price stone < 600) | |
(can-buy-commodity stone) | |
=> | |
(chat-local-to-self "Buying stone for a castle.") | |
(buy-commodity stone)) | |
;================================================================ | |
(defrule | |
(building-type-count-total castle < 10) | |
(stone-amount < castle-stone) | |
(or (gold-amount > 10200) | |
(and (or (unit-type-count-total trade-cart >= 20) | |
(unit-type-count-total trade-cog >= 20)) | |
(gold-amount > 5500))) | |
; (building-available castle) | |
(commodity-buying-price stone < 600) | |
(can-buy-commodity stone) | |
=> | |
(chat-local-to-self "Buying stone for a castle.") | |
(buy-commodity stone)) | |
;================================================================ | |
(defrule | |
(civilian-population < max-civ) | |
(building-type-count-total town-center < 4) | |
(current-age >= castle-age) | |
(or (strategic-number sn-military-level >= 2) | |
(and (goal strategy-goal boom) | |
(or (unit-type-count-total monk >= 1) | |
(building-type-count-total monastery <= 0)))) | |
(wood-amount >= 275) | |
(stone-amount < 100) | |
(can-buy-commodity stone) | |
=> | |
(chat-local-to-self "Buying stone for a towncenter.") | |
(buy-commodity stone)) | |
;================================================================ | |
(defrule | |
(building-type-count-total castle >= 3) | |
(building-type-count-total town-center >= 3) | |
(players-military-population focus-player >= 50) | |
(military-population < 30) | |
(gold-amount < 100) | |
(commodity-selling-price stone > 200) | |
(can-sell-commodity stone) | |
=> | |
(chat-local-to-self "Selling stone.") | |
(sell-commodity stone)) | |
;================================================================ | |
; Food excess | |
;================================================================ | |
#load-if-defined CAPTURE-THE-RELIC | |
(defrule | |
(food-amount > 200) | |
(gold-amount < 100) | |
(unit-type-count-total monk <= 0) | |
(unit-type-count-total 134 <= 0); dead monk | |
(can-sell-commodity food) | |
=> | |
(chat-local-to-self "Selling food for a monk.") | |
(sell-commodity food)) | |
#end-if | |
;================================================================ | |
(defrule | |
(food-amount > 700) | |
(gold-amount < 100) | |
(commodity-selling-price food > 40) | |
(can-sell-commodity food) | |
=> | |
(chat-local-to-self "Selling food.") | |
(sell-commodity food)) | |
;================================================================ | |
(defrule | |
(food-amount > 1000) | |
(gold-amount < 100) | |
(can-sell-commodity food) | |
=> | |
(chat-local-to-self "Selling food.") | |
(sell-commodity food)) | |
;================================================================ | |
(defrule | |
(food-amount > 10000) | |
(gold-amount < 200) | |
(can-sell-commodity food) | |
=> | |
(chat-local-to-self "Selling food.") | |
(sell-commodity food)) | |
;================================================================ | |
(defrule | |
(food-amount > 1500) | |
(gold-amount < 300) | |
(commodity-selling-price food > 30) | |
(can-sell-commodity food) | |
=> | |
(chat-local-to-self "Selling food.") | |
(sell-commodity food)) | |
;================================================================ | |
(defrule | |
(food-amount > 2300) | |
(gold-amount < 600) | |
(or (cc-players-unit-type-count 0 gold-mine < 1) | |
(commodity-selling-price food > 40)) | |
(can-sell-commodity food) | |
=> | |
(chat-local-to-self "Selling food.") | |
(sell-commodity food)) | |
;================================================================ | |
(defrule | |
(food-amount > 400) | |
(gold-amount < 200) | |
(wood-amount < 100) | |
(cc-players-unit-type-count 0 tree-class < 30) | |
(can-sell-commodity food) | |
=> | |
(chat-local-to-self "Selling food.") | |
(sell-commodity food)) | |
;================================================================ | |
(defrule | |
(food-amount > 100) | |
(gold-amount < 200) | |
(wood-amount < 60) | |
(or (cc-players-unit-type-count 0 tree-class < 20) | |
(dropsite-min-distance wood > 25)) | |
(can-sell-commodity food) | |
=> | |
(chat-local-to-self "Selling food.") | |
(sell-commodity food)) | |
;================================================================ | |
; Buying food | |
;================================================================ | |
(defrule | |
(gold-amount > 1800) | |
(food-amount < 200) | |
(can-buy-commodity food) | |
=> | |
(chat-local-to-self "Buying food.") | |
(buy-commodity food)) | |
;================================================================ | |
(defrule | |
(gold-amount > 1000) | |
(food-amount < 100) | |
(can-buy-commodity food) | |
=> | |
(chat-local-to-self "Buying food.") | |
(buy-commodity food)) | |
;================================================================ | |
(defrule | |
(gold-amount > 2500) | |
(food-amount < 300) | |
(can-buy-commodity food) | |
=> | |
(chat-local-to-self "Buying food.") | |
(buy-commodity food)) | |
;================================================================ | |
(defrule | |
(food-amount < 4100) | |
(or (gold-amount > 10000) | |
(and (or (unit-type-count-total trade-cart >= 15) | |
(unit-type-count-total trade-cog >= 15)) | |
(gold-amount > 5200))) | |
(can-buy-commodity food) | |
=> | |
(chat-local-to-self "Buying food.") | |
(buy-commodity food)) | |
;================================================================ | |
; Wood excess | |
;================================================================ | |
#load-if-defined CAPTURE-THE-RELIC | |
(defrule | |
(wood-amount > 200) | |
(gold-amount < 100) | |
(unit-type-count-total monk <= 0) | |
(unit-type-count-total 134 <= 0); dead monk | |
(can-sell-commodity wood) | |
=> | |
(chat-local-to-self "Selling wood for a monk.") | |
(sell-commodity wood)) | |
#end-if | |
;================================================================ | |
(defrule | |
(or (cc-players-unit-type-count 0 tree-class > 300) | |
(dropsite-min-distance wood < 15)) | |
(wood-amount > 1100) | |
(gold-amount < 200) | |
(commodity-selling-price wood > 45) | |
(can-sell-commodity wood) | |
=> | |
(chat-local-to-self "Selling wood.") | |
(sell-commodity wood)) | |
;================================================================ | |
(defrule | |
(or (cc-players-unit-type-count 0 tree-class > 300) | |
(dropsite-min-distance wood < 15)) | |
(wood-amount > 700) | |
(gold-amount < 100) | |
(commodity-selling-price wood > 30) | |
(can-sell-commodity wood) | |
=> | |
(chat-local-to-self "Selling wood.") | |
(sell-commodity wood)) | |
;================================================================ | |
(defrule | |
(or (cc-players-unit-type-count 0 tree-class > 300) | |
(dropsite-min-distance wood < 15)) | |
(wood-amount > 900) | |
(gold-amount < 100) | |
(can-sell-commodity wood) | |
=> | |
(chat-local-to-self "Selling wood.") | |
(sell-commodity wood)) | |
;================================================================ | |
(defrule | |
(or (cc-players-unit-type-count 0 tree-class > 300) | |
(dropsite-min-distance wood < 15)) | |
(wood-amount > 1500) | |
(gold-amount < 300) | |
(or (cc-players-unit-type-count 0 gold-mine < 1) | |
(commodity-selling-price wood > 50)) | |
(can-sell-commodity wood) | |
=> | |
(chat-local-to-self "Selling wood.") | |
(sell-commodity wood)) | |
;================================================================ | |
; Buying wood | |
;================================================================ | |
;(defrule | |
; (wood-amount < 300) | |
; (gold-amount > 1200) | |
; (can-buy-commodity wood) | |
;=> | |
; (chat-local-to-self "Buying wood.") | |
; (buy-commodity wood)) | |
;================================================================ | |
;(defrule | |
; (wood-amount < 200) | |
; (gold-amount > 700) | |
; (can-buy-commodity wood) | |
;=> | |
; (chat-local-to-self "Buying wood.") | |
; (buy-commodity wood)) | |
;================================================================ | |
(defrule | |
(wood-amount < 200) | |
(gold-amount > 1200) | |
(or (players-building-type-count any-ally market >= 1) | |
(players-building-type-count any-ally dock >= 1)) | |
(or (unit-type-count-total trade-cart >= 15) | |
(unit-type-count-total trade-cog >= 15)) | |
(can-buy-commodity wood) | |
=> | |
(chat-local-to-self "Buying wood.") | |
(buy-commodity wood)) | |
;================================================================ | |
(defrule | |
(wood-amount < 60) | |
;(or (cc-players-unit-type-count 0 tree-class < 150) | |
(dropsite-min-distance wood > 25);) | |
(can-buy-commodity wood) | |
=> | |
(chat-local-to-self "Buying wood.") | |
(buy-commodity wood)) | |
;================================================================ | |
(defrule | |
(wood-amount < 100) | |
(gold-amount > 100) | |
;(or (cc-players-unit-type-count 0 tree-class < 150) | |
(dropsite-min-distance wood > 25);) | |
(can-buy-commodity wood) | |
=> | |
(chat-local-to-self "Buying wood.") | |
(buy-commodity wood)) | |
;================================================================ | |
(defrule | |
(wood-amount < 200) | |
(gold-amount > 300) | |
;(or (cc-players-unit-type-count 0 tree-class < 150) | |
(dropsite-min-distance wood > 25);) | |
(can-buy-commodity wood) | |
=> | |
(chat-local-to-self "Buying wood.") | |
(buy-commodity wood)) | |
;================================================================ | |
(defrule | |
(wood-amount < 4100) | |
(or (gold-amount > 10000) | |
(and (or (unit-type-count-total trade-cart >= 15) | |
(unit-type-count-total trade-cog >= 15)) | |
(gold-amount > 5200))) | |
(can-buy-commodity wood) | |
=> | |
(chat-local-to-self "Buying wood.") | |
(buy-commodity wood)) | |
;================================================================ | |
; Trading to accomplish important goals | |
;================================================================ | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(building-type-count blacksmith >= 1) | |
(gold-amount > 350) | |
(food-amount < 800) | |
(can-buy-commodity food) | |
(research-available castle-age) | |
=> | |
(chat-local-to-self "Buying food to advance to the next age.") | |
(buy-commodity food)) | |
;================================================================ | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(building-type-count blacksmith >= 1) | |
(gold-amount < 200) | |
(food-amount > 900) | |
(research-available castle-age) | |
(can-sell-commodity food) | |
=> | |
(chat-local-to-self "Selling food to advance to the next age.") | |
(sell-commodity food)) | |
;================================================================ | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(building-type-count blacksmith >= 1) | |
(food-amount >= 600) | |
(or (gold-amount < 200) | |
(food-amount < 800)) | |
(wood-amount > 100) | |
(research-available castle-age) | |
(can-sell-commodity wood) | |
=> | |
(chat-local-to-self "Selling wood to advance to the next age.") | |
(sell-commodity wood)) | |
;================================================================ | |
#load-if-defined BYZANTINE-CIV | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(population >= max-civ) | |
(or (building-type-count castle >= 1) | |
(or (building-type-count university >= 1) | |
(building-type-count siege-workshop >= 1))) | |
(food-amount >= 767) | |
(gold-amount < 536) | |
(research-available imperial-age) | |
(can-sell-commodity food) | |
=> | |
(chat-local-to-self "Selling food to advance to the next age.") | |
(sell-commodity food)) | |
;================================================================ | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(population >= max-civ) | |
(or (building-type-count castle >= 1) | |
(or (building-type-count university >= 1) | |
(building-type-count siege-workshop >= 1))) | |
(food-amount <= 577) | |
(gold-amount >= 666) | |
(research-available imperial-age) | |
(can-buy-commodity food) | |
;(or | |
(up-research-status c: ri-hand-cart >= research-pending) | |
; (wood-amount <= 100)) | |
=> | |
(chat-local-to-self "Buying food to advance to the next age.") | |
(buy-commodity food)) | |
;================================================================ | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(population >= max-civ) | |
(or (building-type-count castle >= 1) | |
(or (building-type-count university >= 1) | |
(building-type-count siege-workshop >= 1))) | |
(food-amount >= 500); 667 | |
(gold-amount < 536) | |
(wood-amount > 300) | |
(research-available imperial-age) | |
(can-sell-commodity wood) | |
=> | |
(chat-local-to-self "Selling wood to advance to the next age.") | |
(sell-commodity wood)) | |
#else | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(population >= max-civ) | |
(or (building-type-count castle >= 1) | |
(or (building-type-count university >= 1) | |
(building-type-count siege-workshop >= 1))) | |
(food-amount >= 1100) | |
(gold-amount < 800) | |
(research-available imperial-age) | |
(can-sell-commodity food) | |
=> | |
(chat-local-to-self "Selling food to advance to the next age.") | |
(sell-commodity food)) | |
;================================================================ | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(population >= max-civ) | |
(or (building-type-count castle >= 1) | |
(or (building-type-count university >= 1) | |
(building-type-count siege-workshop >= 1))) | |
(food-amount <= 900) | |
(gold-amount >= 940) | |
(research-available imperial-age) | |
(can-buy-commodity food) | |
;(or | |
(up-research-status c: ri-hand-cart >= research-pending) | |
; (wood-amount <= 100)) | |
=> | |
(chat-local-to-self "Buying food to advance to the next age.") | |
(buy-commodity food)) | |
;================================================================ | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(population >= max-civ) | |
(or (building-type-count castle >= 1) | |
(or (building-type-count university >= 1) | |
(building-type-count siege-workshop >= 1))) | |
(food-amount >= 800); 1000 | |
(gold-amount < 800) | |
(wood-amount > 300) | |
(research-available imperial-age) | |
(can-sell-commodity wood) | |
=> | |
(chat-local-to-self "Selling wood to advance to the next age.") | |
(sell-commodity wood)) | |
#end-if | |
#load-if-defined CAPTURE-THE-RELIC | |
(defrule | |
(gold-amount < 100) | |
(unit-type-count-total monk <= 0) | |
(unit-type-count-total 134 <= 0); dead monk | |
=> | |
(set-strategic-number sn-resource-control monk)) | |
(defrule | |
(unit-type-count-total monk < 1) | |
(can-train monk) | |
=> | |
(train monk)) | |
(defrule | |
(unit-type-count-total monk >= 1) | |
(strategic-number sn-resource-control == monk) | |
=> | |
(set-strategic-number sn-resource-control 0)) | |
#end-if | |
#load-if-not-defined WONDER-RACE | |
(defrule | |
(building-type-count dock > 0) | |
(strategic-number sn-resource-control <= 2) | |
(goal train-civ-goal 1) | |
(research-available ri-war-galley) | |
(goal enemy-boats-goal 1) | |
(or | |
(and | |
(unit-type-count fire-ship-line > 14) | |
(up-research-status c: ri-bow-saw >= research-pending) | |
) | |
(or | |
(civ-selected viking) | |
(unit-type-count galley-line > 6) | |
) | |
) | |
(food-amount < 230) | |
=> | |
(set-goal train-civ-goal navy) | |
(set-strategic-number sn-resource-control navy) | |
(chat-to-player my-player-number "save-resources for navy upgrades") | |
) | |
(defrule | |
(gold-amount > 300) | |
(food-amount < 200) | |
(strategic-number sn-resource-control == navy) | |
(or | |
(research-available ri-war-galley) | |
(research-available ri-careening) | |
) | |
(can-buy-commodity food) | |
=> | |
(buy-commodity food) | |
(chat-to-player my-player-number "3 buy food for navy-upgrades") | |
) | |
(defrule | |
(or | |
(strategic-number sn-resource-control == ri-long-swordsman) | |
(or | |
(goal train-civ-goal ri-chain-mail) | |
(goal train-civ-goal ri-pikeman) | |
) | |
) | |
(gold-amount > 300) | |
(food-amount < 150) | |
(can-buy-commodity food) | |
=> | |
(buy-commodity food) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count skirmisher-line > 7) | |
(research-available ri-elite-skirmisher) | |
(nor | |
(and | |
(wood-amount < 150) | |
(and | |
(food-amount > 250); get eskirms over 2nd TC or monastery | |
(gold-amount > 250); but don't slow down all other researches | |
) | |
) | |
(and | |
(wood-amount > 400); better spend the wood on buildings as gold is low. | |
(gold-amount < 75) | |
) | |
) | |
(goal strategy-goal flush) | |
=> | |
(set-goal save-wood-goal 1) | |
(set-strategic-number sn-resource-control ri-elite-skirmisher) | |
;debug (chat-to-player my-player-number "Saving resources for ri-elite-skirmisher") | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(research-available ri-elite-skirmisher) | |
(or | |
(building-type-count-total town-center >= tc-level-three) | |
(strategic-number sn-archer-threat > 0) | |
) | |
(current-age-time > 120); don't immediately block everything | |
(unit-type-count skirmisher-line > 7) | |
(building-type-count archery-range > 0) | |
=> | |
(set-goal save-wood-goal 1) | |
(set-strategic-number sn-resource-control ri-elite-skirmisher) | |
;debug (chat-to-player my-player-number "Saving resources for ri-elite-skirmisher") | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-archer-threat >= 1) | |
(research-available ri-elite-skirmisher) | |
(or | |
(nand | |
(town-under-attack) | |
(strategic-number sn-military-level < 0) | |
) | |
(building-type-count-total town-center >= tc-level-four) | |
) | |
(building-type-count-total town-center >= tc-level-three) | |
(military-population > 14) | |
(building-type-count archery-range > 0) | |
=> | |
(set-goal save-wood-goal 1) | |
(set-strategic-number sn-resource-control ri-elite-skirmisher) | |
;debug (chat-to-player my-player-number "Saving resources for ri-elite-skirmisher") | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-archer-threat > 1) | |
(research-available ri-elite-skirmisher) | |
(or | |
(goal unit-goal archer) | |
(goal unit-goal cavalry-archer) | |
) | |
(or | |
(building-type-count-total town-center >= tc-level-two) | |
(building-type-count-total siege-workshop > 0) | |
) | |
(military-population > 19) | |
(building-type-count archery-range > 0) | |
=> | |
(set-goal save-wood-goal 1) | |
(set-strategic-number sn-resource-control ri-elite-skirmisher) | |
;debug (chat-to-player my-player-number "Saving resources for ri-elite-skirmisher") | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-archer-threat > 1) | |
(research-available ri-elite-skirmisher) | |
(or | |
(goal unit-goal eagle-warrior) | |
(and | |
(goal unit-goal knight) | |
(goal control-goal aggressive-rush) | |
) | |
) | |
(building-type-count archery-range > 0) | |
(military-population > 14) | |
(unit-type-count-total mangonel-line == 0) | |
=> | |
(set-goal save-wood-goal 1) | |
(set-strategic-number sn-resource-control ri-elite-skirmisher) | |
;debug (chat-to-player my-player-number "Saving resources for ri-elite-skirmisher") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(goal train-civ-goal 1) | |
(or | |
(goal unit-goal archer) | |
(and | |
(and | |
(goal unit-goal knight) | |
(goal ranged-unit-type-goal archer) | |
) | |
(goal anti-cavalry-threat-goal 1) | |
) | |
) | |
(research-available ri-crossbow) | |
(building-type-count archery-range >= 1) | |
=> | |
(set-goal train-civ-goal ri-crossbow) | |
(set-strategic-number sn-resource-control ri-crossbow) | |
;debug (chat-to-player my-player-number "Saving resources for ri-crossbow") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(goal train-civ-goal 1) | |
(goal ranged-unit-type-goal archer) | |
(or | |
(and | |
(wood-amount > 150) | |
(food-amount < 70) | |
) | |
(goal enemy-goal eagle-warrior) | |
) | |
(gold-amount > 250) | |
(research-available ri-crossbow) | |
(building-type-count archery-range >= 1) | |
=> | |
(set-goal train-civ-goal ri-crossbow) | |
(set-strategic-number sn-resource-control ri-crossbow) | |
;debug (chat-to-player my-player-number "Saving resources for ri-crossbow") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(current-age == castle-age) | |
(goal train-civ-goal 1) | |
(or | |
(and | |
(goal unit-goal archer) | |
(building-type-count archery-range >= 1) | |
) | |
(and | |
(unit-type-count ranged-unit-class > 8) | |
(goal unit-goal my-unique-unit-line) | |
) | |
) | |
(research-available ri-fletching) | |
=> | |
(set-goal train-civ-goal ri-fletching) | |
) | |
(defrule | |
(strategic-number sn-military-level >= 0) | |
(strategic-number sn-resource-control <= 2) | |
(goal train-civ-goal 1) | |
(unit-type-count ranged-unit-class >= mid-min-number-upgrade) | |
(goal strategy-goal flush) | |
(not (research-available ri-long-swordsman)) | |
(research-available ri-bodkin-arrow) | |
=> | |
(set-goal train-civ-goal ri-bodkin-arrow) | |
(set-strategic-number sn-resource-control ri-bodkin-arrow) | |
;debug (chat-to-player my-player-number "Saving resources for ri-bodkin-arrow") | |
) | |
#load-if-not-defined BRITON-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(goal train-civ-goal 1) | |
(goal unit-goal archer) | |
(research-available ri-bodkin-arrow) | |
(unit-type-count ranged-unit-class >= mid-min-number-upgrade) | |
(nand | |
(strategic-number sn-cavalry-threat >= 1) | |
(unit-type-count spearman-line < 10) | |
) | |
(nor | |
(research-available ri-crossbow) | |
(or | |
(goal strategy-goal boom) | |
(goal strategy-goal fast-imp) | |
) | |
) | |
=> | |
(set-goal train-civ-goal ri-bodkin-arrow) | |
(set-strategic-number sn-resource-control ri-bodkin-arrow) | |
;debug (chat-to-player my-player-number "Saving resources for ri-bodkin-arrow") | |
) | |
#else | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(goal train-civ-goal 1) | |
(goal unit-goal archer) | |
(research-available ri-bodkin-arrow) | |
(unit-type-count ranged-unit-class >= mid-min-number-upgrade) | |
(nand | |
(strategic-number sn-cavalry-threat >= 1) | |
(unit-type-count spearman-line < 10) | |
) | |
(up-research-status c: ri-crossbow >= research-pending) | |
(or | |
(building-type-count-total town-center == 1) | |
(unit-type-count villager > 55) | |
) | |
=> | |
(set-goal train-civ-goal ri-bodkin-arrow) | |
(set-strategic-number sn-resource-control ri-bodkin-arrow) | |
;debug (chat-to-player my-player-number "Saving resources for ri-bodkin-arrow") | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(goal train-civ-goal 1) | |
(or | |
(unit-type-count-total war-galley > 0) | |
(and | |
(building-type-count-total stable < 2) | |
(unit-type-count cavalry-archer-class >= high-min-number-upgrade) | |
) | |
) | |
(research-available ri-bodkin-arrow) | |
=> | |
(set-goal train-civ-goal ri-bodkin-arrow) | |
(set-strategic-number sn-resource-control ri-bodkin-arrow) | |
;debug (chat-to-player my-player-number "Saving resources for ri-bodkin-arrow") | |
) | |
#load-if-defined BRITON-CIV | |
(defrule | |
(can-research-with-escrow my-unique-research) | |
=> | |
(release-escrow wood)(release-escrow gold) | |
(research my-unique-research) | |
) | |
#end-if | |
#load-if-defined CHINESE-CIV | |
(defrule | |
(or | |
(unit-type-count my-unique-unit-line > 9) | |
(unit-type-count scorpion-line > 9) | |
) | |
(can-research my-unique-research) | |
=> | |
(research my-unique-research) | |
) | |
#end-if | |
#load-if-defined FRANKISH-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count-total my-unique-unit-line > 10) | |
(can-research my-unique-research) | |
=> | |
(research my-unique-research) | |
) | |
#end-if | |
#load-if-defined GOTHIC-CIV | |
(defrule | |
(can-research-with-escrow ri-perfusion) | |
=> | |
(release-escrow wood)(release-escrow gold) | |
(research ri-perfusion) | |
) | |
#end-if | |
#load-if-defined MAYAN-CIV | |
(defrule | |
(not (research-available ri-elite-eagle-warrior)) | |
(can-research my-unique-research) | |
=> | |
(research my-unique-research) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-current-age >= ci-transit) | |
(strategic-number sn-military-level >= 0) | |
(research-available ri-eagle-warrior) | |
(goal unit-goal eagle-warrior) | |
=> | |
(set-strategic-number sn-resource-control ri-elite-eagle-warrior) | |
;debug (chat-to-player my-player-number "Saving resources for ri-eagle-warrior") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(and | |
(and | |
(strategic-number sn-current-age == ci-transit) | |
(strategic-number sn-military-level >= 0) | |
) | |
(nand | |
(food-amount > 800) | |
(gold-amount > 500) | |
) | |
) | |
(research-available ri-elite-eagle-warrior) | |
) | |
(goal unit-goal eagle-warrior) | |
=> | |
(set-strategic-number sn-resource-control ri-elite-eagle-warrior) | |
;debug (chat-to-player my-player-number "Saving resources for ri-elite-eagle-warrior") | |
) | |
(defrule | |
(strategic-number sn-resource-control == ri-elite-eagle-warrior) | |
(food-amount < 800) | |
(gold-amount > 600) | |
(research-available ri-elite-eagle-warrior) | |
=> | |
(set-goal train-civ-goal ri-elite-eagle-warrior) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(research-available ri-arbalest) | |
(or | |
(and | |
(food-amount > 350) | |
(gold-amount < 300) | |
) | |
(food-amount < 350) | |
) | |
(goal unit-goal archer) | |
=> | |
(set-strategic-number sn-resource-control ri-arbalest) | |
;debug (chat-to-player my-player-number "Saving resources for ri-arbalest") | |
) | |
#load-if-not-defined TURKISH-CIV; they get chemistry for free | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(research-available ri-chemistry) | |
(and | |
(strategic-number sn-current-age == ci-transit) | |
(or | |
(food-amount < 300) | |
(gold-amount < 200) | |
) | |
) | |
) | |
(building-type-count university > 0) | |
(goal unit-goal gunpowder-class) | |
=> | |
(set-strategic-number sn-resource-control ri-chemistry) | |
;debug (chat-to-player my-player-number "Saving resources for ri-chemistry") | |
) | |
#end-if | |
#load-if-not-defined RIVERS-MAP | |
#load-if-not-defined BALTIC-MAP | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(strategic-number sn-resource-control < 2) | |
(or | |
(soldier-count >= 45) | |
(game-time < 3600) | |
) | |
(soldier-count > 15) | |
(nand | |
(building-type-count dock == 0); we lost the naval battle so train more soldiers to defend | |
(and | |
(current-age >= castle-age) | |
(game-time > 1800) | |
) | |
) | |
(population-cap <= 250) | |
=> | |
(set-strategic-number sn-resource-control 1); train navy only | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(population >= del-civ-pop) | |
(or (civilian-population > 70) | |
(game-time > 5400)) | |
(players-unit-type-count every-enemy fire-ship-line < 12) | |
(players-unit-type-count every-enemy galley-line < 12) | |
(warboat-count > 40) | |
(or (and (soldier-count > 19) | |
(unit-type-count transport-ship < 2)) | |
(soldier-count < 21)) | |
(unit-type-count-total villager >= 12) | |
(population-cap <= 250) | |
=> | |
(set-goal train-civ-goal -1) | |
(delete-unit villager) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(population >= del-civ-pop) | |
(current-age == imperial-age) | |
(or (warboat-count < 45) | |
(and (unit-type-count transport-ship > 1) | |
(or (dropsite-min-distance wood > 20) | |
(cc-players-unit-type-count 0 tree-class < 20)))) | |
(building-type-count dock > 0) | |
(unit-type-count-total villager >= 12) | |
=> | |
(set-goal train-civ-goal -1) | |
(delete-unit villager) | |
) | |
#end-if | |
#end-if | |
#load-if-not-defined AZTEC-CIV | |
#load-if-not-defined MAYAN-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(goal train-civ-goal 1) | |
(goal strategy-goal rush) | |
(goal unit-goal knight) | |
(research-available ri-chain-barding) | |
(gold-amount >= 150) | |
(goal control-goal shot) | |
(strategic-number sn-military-level >= 0) | |
=> | |
(set-goal train-civ-goal ri-chain-barding) | |
(set-strategic-number sn-resource-control ri-chain-barding) | |
;debug (chat-to-player my-player-number "Saving resources for ri-chain-barding") | |
) | |
#end-if | |
#end-if | |
; Place TC upgrades always before villager training or they won't fire unless you reached max villager | |
(defrule | |
(strategic-number sn-resource-control == 3) | |
(or | |
(not (research-available ri-hand-cart)) | |
(unit-type-count-total villager < 55) | |
) | |
(research-completed ri-wheel-barrow) | |
=> | |
(release-escrow wood)(set-escrow-percentage wood 0) | |
(set-strategic-number sn-resource-control 0) | |
(set-goal train-civ-goal 1) | |
) | |
(defrule | |
(goal train-civ-goal 1) | |
(unit-type-count villager >= 40) | |
(can-train villager) | |
(research-available ri-wheel-barrow) | |
(can-buy-commodity food) | |
(food-amount >= 75) | |
(food-amount < 175) | |
(wood-amount >= 50); enough wood for it | |
=> | |
(buy-commodity food) | |
(chat-to-player my-player-number "Attempting to research ri-wheel-barrow: Buy Food") | |
(set-goal train-civ-goal 2) | |
(set-strategic-number sn-resource-control 3) | |
) | |
(defrule | |
(goal train-civ-goal 1) | |
(unit-type-count villager >= 50) | |
(research-available ri-wheel-barrow) | |
(strategic-number sn-military-level >= 0) | |
=> | |
(set-goal train-civ-goal 2) | |
(set-strategic-number sn-resource-control 3) | |
;debug (chat-to-player my-player-number "Saving resources for ri-wheel-barrow") | |
) | |
(defrule | |
(strategic-number sn-resource-control == 3) | |
(players-building-type-count any-ally market > 0) | |
(unit-type-count villager >= 60) | |
(research-available ri-hand-cart) | |
(food-amount > 300) | |
(wood-amount < 150) | |
=> | |
(set-goal tribute-goal 4) | |
) | |
(defrule | |
(nor | |
(town-under-attack) | |
(and | |
(building-type-count-total town-center == 1) | |
(up-research-status c: imperial-age == research-pending) | |
) | |
) | |
(goal train-civ-goal 1) | |
(strategic-number sn-resource-control < 4) | |
(unit-type-count villager >= 60) | |
(research-available ri-hand-cart) | |
(can-buy-commodity food) | |
(food-amount < 300) | |
=> | |
(set-escrow-percentage wood 100) | |
(buy-commodity food) | |
(chat-to-player my-player-number "Attempting to research ri-hand-cart: Buy Food") | |
(set-strategic-number sn-resource-control 3) | |
) | |
(defrule | |
(nor | |
(town-under-attack) | |
(and | |
(building-type-count-total town-center == 1) | |
(up-research-status c: imperial-age == research-pending) | |
) | |
) | |
(strategic-number sn-resource-control < 4) | |
(unit-type-count villager >= 60) | |
(research-available ri-hand-cart) | |
(can-buy-commodity wood) | |
(food-amount >= 300); enough food for it | |
(wood-amount >= 100) | |
(wood-amount < 200) | |
=> | |
(set-escrow-percentage wood 100) | |
(buy-commodity wood) | |
(chat-to-player my-player-number "Attempting to research ri-hand-cart: Buy Wood") | |
(set-strategic-number sn-resource-control 3) | |
) | |
(defrule | |
(strategic-number sn-resource-control == 3) | |
(research-available ri-hand-cart) | |
(escrow-amount wood >= 200) | |
=> | |
(set-escrow-percentage wood 0) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 4) | |
(or | |
(or | |
(goal strategy-goal sling) | |
(goal strategy-goal flush) | |
) | |
(population-cap < 75) | |
) | |
(unit-type-count villager >= 16) | |
(can-research ri-wheel-barrow) | |
=> | |
(research ri-wheel-barrow) | |
(set-goal train-civ-goal 1) | |
(set-strategic-number sn-resource-control 0) | |
) | |
(defrule | |
(unit-type-count villager >= 29) | |
(strategic-number sn-resource-control < 4) | |
(or | |
(current-age >= castle-age) | |
(and | |
(current-age-time < 20) | |
(food-amount > 720) | |
) | |
) | |
(nand | |
(goal unit-goal my-unique-unit-line) | |
(research-available ri-stone-mining) | |
) | |
(can-research ri-wheel-barrow) | |
=> | |
(research ri-wheel-barrow) | |
(set-goal train-civ-goal 1) | |
(set-strategic-number sn-resource-control 0) | |
) | |
(defrule | |
(or | |
(unit-type-count-total villager >= 55) | |
(civilian-population >= max-civ) | |
) | |
(can-research-with-escrow ri-hand-cart) | |
=> | |
(release-escrow wood)(set-escrow-percentage wood 0) | |
(research ri-hand-cart) | |
(set-goal train-civ-goal 1) | |
(set-strategic-number sn-resource-control 0) | |
) | |
#end-if ; not WONDER-RACE | |
(defrule | |
(or | |
(or | |
(research-available ri-wheel-barrow) | |
(civ-selected viking) | |
) | |
(and | |
(gold-amount > 220) | |
(food-amount < 730) | |
) | |
) | |
(current-age >= feudal-age) | |
(can-research ri-loom) | |
=> | |
(research ri-loom) | |
) | |
#load-if-not-defined ALL-TECHS-ENABLED | |
(defrule | |
(can-research ri-loom) | |
(or | |
(civ-selected mayan) | |
(civ-selected chinese) | |
) | |
=> | |
(research ri-loom) | |
) | |
#end-if | |
#load-if-defined LOW-RESOURCES-START | |
#load-if-defined DIFFICULTY-HARDEST | |
#load-if-defined FORTRESS-MAP | |
(defrule | |
(goal train-civ-goal 1) | |
; (civilian-population < max-civ); hardest anyway | |
(or (and (current-age == feudal-age) | |
(gold-amount < 180)) | |
(and (unit-type-count villager < 31) | |
(current-age == dark-age))) | |
(can-train villager) | |
=> | |
(disable-timer FDrop) | |
(enable-timer FDrop 21) | |
(train villager) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#load-if-not-defined WONDER-RACE | |
(defrule | |
(goal train-civ-goal 1) | |
(current-age == feudal-age) | |
(civilian-population < max-civ); difficulty | |
(or (goal strategy-goal rush) | |
(goal strategy-goal boom)) | |
(or (food-amount < 760) | |
(current-age-time < 30)) | |
(or (current-age-time < 55) | |
(starting-age == feudal-age)) | |
(can-train villager) | |
=> | |
(disable-timer FDrop) | |
(enable-timer FDrop 21) | |
(train villager) | |
) | |
#end-if | |
; try to push to castle age | |
(defrule | |
(goal strategy-goal flush) | |
(or | |
(or | |
(goal enemy-goal flush) | |
(goal enemy-goal eagle-warrior) | |
) | |
(current-age-time >= 720) | |
) | |
(research-available castle-age) | |
(strategic-number sn-resource-control == 0) | |
(strategic-number sn-military-level >= 0) | |
(goal under-attack-goal 0) | |
(game-time >= 1300) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
;debug (chat-to-player my-player-number "Saving resources for castle-age") | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(research-available castle-age) | |
(strategic-number sn-resource-control == 2) | |
(military-population < 15) | |
(goal under-attack-goal 1) | |
=> | |
(set-strategic-number sn-resource-control 0) | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(strategic-number sn-current-age == feudal) | |
(strategic-number sn-resource-control == 0) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(wood-amount < 200) | |
(food-amount > 700) | |
(building-type-count-total blacksmith == 0) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
;debug (chat-to-player my-player-number "Saving resources for castle-age") | |
) | |
(defrule | |
(players-military-population every-enemy < 5) | |
(goal strategy-goal flush) | |
(goal forward-threat-goal 1) | |
(strategic-number sn-current-age == feudal) | |
(strategic-number sn-resource-control == 0) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
;debug (chat-to-player my-player-number "Saving resources for castle-age") | |
) | |
; try to push to imperial age | |
(defrule | |
(current-age-time > 600) | |
(strategic-number sn-current-age == castle) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(or (civilian-population >= 30) | |
(goal strategy-goal fast-imp)) | |
(food-amount > 500) | |
(gold-amount > 400) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
;debug (chat-to-player my-player-number "Saving resources for imperial-age") | |
) | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(goal strategy-goal rush) | |
(building-type-count-total town-center >= tc-level-three) | |
(goal unit-goal knight) | |
(players-building-type-count focus-player castle > 0) | |
(or | |
(players-building-type-count focus-player castle > 1) | |
(players-building-type-count focus-player stone-wall-line > 15) | |
) | |
=> | |
(set-goal strategy-goal fast-imp) | |
(disable-self) | |
) | |
(defrule | |
(research-available imperial-age) | |
(strategic-number sn-resource-control == 0) | |
(building-type-count town-center >= tc-level-two) | |
(strategic-number sn-military-level >= 0) | |
(or (civilian-population >= 130) | |
(or (and (civilian-population >= 115) | |
(strategic-number sn-military-level >= 1)) | |
(and (civilian-population >= 100) | |
(strategic-number sn-military-level >= 2)))) | |
(nor (town-under-attack) | |
(enemy-buildings-in-town)) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
;debug (chat-to-player my-player-number "Saving resources for imperial-age") | |
) | |
(defrule | |
(research-available imperial-age) | |
(strategic-number sn-resource-control == 0) | |
(building-type-count town-center >= tc-level-two) | |
(population > 140) | |
(strategic-number sn-military-level >= 0) | |
(nor | |
(town-under-attack) | |
(and | |
(players-current-age focus-player == imperial-age) | |
(strategic-number sn-military-level >= 2) | |
) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
;debug (chat-to-player my-player-number "Saving resources for imperial-age") | |
) | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(strategic-number sn-resource-control == 0) | |
(or | |
(population >= 140) | |
(unit-type-count-total eagle-warrior-line > 40) | |
) | |
(or | |
(strategic-number sn-military-level >= -1) | |
(unit-type-count cavalry-unit-class > 20) | |
) | |
(goal under-attack-goal 0) | |
(or | |
(goal strategy-goal fast-imp) | |
(and | |
(goal strategy-goal boom) | |
(goal unit-goal knight) | |
) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
;debug (chat-to-player my-player-number "Saving resources for imperial-age") | |
) | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(or | |
(and | |
(research-available ri-cavalier) | |
(or | |
(goal unit-goal knight-line) | |
(unit-type-count knight-line > 19) | |
) | |
) | |
(and | |
(research-available ri-hussar) | |
(nor | |
(goal unit-goal militiaman-line) | |
(civ-selected magyar) | |
) | |
) | |
) | |
(up-research-status c: ri-champion < research-pending) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(or | |
(and | |
(or | |
(research-available ri-two-handed-swordsman) | |
(research-available ri-champion) | |
) | |
(or | |
(goal unit-goal militiaman-line) | |
(goal control-goal militiaman-line) | |
) | |
) | |
(and | |
(goal ranged-unit-type-goal archer) | |
(research-available ri-arbalest) | |
) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(strategic-number sn-current-age >= ci-transit) | |
(or | |
(or | |
(research-available ri-blast-furnace) | |
(research-available ri-plate-mail) | |
) | |
(research-available ri-chain-mail) | |
) | |
(unit-type-count infantry-class > 12) | |
(or | |
(food-amount < 350) | |
(gold-amount < 225) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
#load-if-not-defined AZTEC-CIV | |
#load-if-not-defined MAYAN-CIV | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(strategic-number sn-current-age >= ci-transit) | |
(or | |
(or | |
(research-available ri-blast-furnace) | |
(research-available ri-plate-barding) | |
) | |
(research-available ri-chain-barding) | |
) | |
(unit-type-count cavalry-unit-class > 12) | |
(or | |
(food-amount < 350) | |
(gold-amount < 225) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
#load-if-defined UP-POCKET-POSITION | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(current-age == castle-age) | |
(building-type-count stone-wall > 5) | |
(goal unit-goal knight) | |
(or | |
(strategic-number sn-military-level >= 0) | |
(and | |
(unit-type-count cavalry-unit-class > 5) | |
(goal under-attack-goal 0) | |
) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(strategic-number sn-current-age >= fc-transit) | |
(game-time < 1800) | |
(building-type-count stone-wall > 5) | |
(goal unit-goal skirmisher) | |
(building-type-count town-center < 3) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(current-age == castle-age) | |
(civilian-population > 90) | |
(goal unit-goal knight) | |
(or | |
(and | |
(strategic-number sn-military-level >= 0) | |
(unit-type-count cavalry-unit-class > 19) | |
) | |
(population >= eighty-five-percent-pop) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
#load-if-defined PERSIAN-CIV | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(strategic-number sn-current-age >= ci-transit) | |
(goal unit-goal my-unique-unit-line) | |
(building-type-count castle > 0) | |
(or | |
(and | |
(up-research-status c: my-unique-unit-upgrade < research-pending); ri-elite-war-elephant | |
(or | |
(food-amount < 1600) | |
(gold-amount < 1200) | |
) | |
) | |
(research-available my-unique-unit-upgrade) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
;debug (chat-to-player my-player-number "Saving resources for ewe") | |
) | |
#end-if | |
#load-if-not-defined INDIAN-CIV | |
#load-if-not-defined SARACEN-CIV | |
#load-if-not-defined TURKISH-CIV | |
#load-if-not-defined MONGOL-CIV | |
#load-if-not-defined CHINESE-CIV | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(strategic-number sn-current-age >= imperial); ci-transit | |
(goal unit-goal knight) | |
(unit-type-count knight-line > 16) | |
(or | |
(and | |
(up-research-status c: ri-cavalier == research-pending) | |
(or | |
(food-amount < 1300) | |
(gold-amount < 750) | |
) | |
) | |
(research-available ri-paladin) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
;debug (chat-to-player my-player-number "Saving resources for ri-paladin") | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#else | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(unit-type-count camel-line > 7) | |
(or | |
(research-available ri-heavy-camel) | |
(research-available ri-imperial-camel) | |
) | |
(population > eighty-five-percent-pop) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(or | |
(research-available ri-bracer) | |
(research-available ri-ring-archer-armor) | |
) | |
(or | |
(food-amount < 300) | |
(gold-amount < 250) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
(defrule | |
(goal train-civ-goal ri-crossbow) | |
(strategic-number sn-resource-control == ri-crossbow) | |
(up-research-status c: ri-elite-skirmisher == research-pending) | |
(building-type-count archery-range == 1) | |
=> | |
(set-goal train-civ-goal 1) | |
(set-strategic-number sn-resource-control 0) | |
) | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(population > seventy-five-percent-pop) | |
(unit-type-count scorpion-line > 9) | |
(or | |
(research-available ri-heavy-scorpion) | |
(and | |
(civ-selected celtic) | |
(and | |
(building-type-count castle > 0) | |
(research-available my-unique-research) | |
) | |
) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
(set-goal save-wood-goal 1) | |
) | |
(defrule | |
(goal uu-up-goal 1) | |
(population > eighty-five-percent-pop) | |
(research-available my-unique-unit-upgrade) | |
(building-type-count castle > 0) | |
(or | |
(or | |
(unit-type-count female-gold-miner > 0); don't start escrowing when gold income is low | |
(unit-type-count male-gold-miner > 0) | |
) | |
(unit-type-count trade-cart > 5) | |
) | |
=> | |
(set-escrow-percentage food 30)(set-escrow-percentage gold 30) | |
(set-goal escrow-purpose-goal my-unique-unit-line) | |
) | |
#load-if-not-defined AZTEC-CIV ; Jaguars aren't useful in trash wars | |
#load-if-not-defined BRITON-CIV ; Same as most ranged uu | |
#load-if-not-defined CHINESE-CIV | |
#load-if-not-defined MAYAN-CIV | |
#load-if-not-defined MONGOL-CIV | |
#load-if-not-defined KOREAN-CIV | |
(defrule | |
(goal escrow-purpose-goal my-unique-unit-line) | |
(unit-type-count female-gold-miner == 0) | |
(unit-type-count male-gold-miner == 0) | |
(unit-type-count trade-cart == 0) | |
=> | |
(release-escrow food) | |
(set-escrow-percentage food 0); pile up relic/market gold first, as this will take long | |
) | |
(defrule | |
(or | |
(and | |
(goal escrow-purpose-goal my-unique-unit-line) | |
(or | |
(escrow-amount food >= max-food-escrow) | |
(population < max-civ-pop) | |
) | |
) | |
(and | |
(research-available imperial-age) | |
(escrow-amount food >= imp-food) | |
) | |
) | |
=> | |
(set-escrow-percentage food 0) | |
) | |
(defrule | |
(or | |
(and | |
(goal escrow-purpose-goal my-unique-unit-line) | |
(escrow-amount gold >= max-gold-escrow) | |
) | |
(and | |
(research-available imperial-age) | |
(escrow-amount gold >= imp-gold) | |
) | |
) | |
=> | |
(set-escrow-percentage food 30) | |
(set-escrow-percentage gold 0) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(goal escrow-purpose-goal my-unique-unit-line) | |
(or | |
(or | |
(not (research-available my-unique-unit-upgrade)) | |
(building-type-count castle == 0); not included in check above | |
) | |
(and | |
(population < 160) | |
(goal under-attack-goal 1) | |
) | |
) | |
=> | |
(set-escrow-percentage food 0)(set-escrow-percentage gold 0) | |
(release-escrow food)(release-escrow gold) | |
(set-goal escrow-purpose-goal 0) | |
) | |
#load-if-defined SPANISH-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count monastery-class > 12) | |
(up-research-status c: ri-theocracy >= research-pending) | |
(research-available ri-inquisition) | |
(building-type-count castle > 0) | |
=> | |
(set-strategic-number sn-resource-control ri-inquisition) | |
;debug (chat-to-player my-player-number "Saving resources for ri-inquisition") | |
) | |
#end-if | |
#load-if-defined SLAVIC-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count monastery-class > 12) | |
(or | |
(strategic-number sn-current-age >= ci-transit) | |
(goal hostilities-goal 1) | |
) | |
(building-type-count castle > 0) | |
(research-available ri-orthodoxy) | |
=> | |
(set-strategic-number sn-resource-control ri-orthodoxy) | |
;debug (chat-to-player my-player-number "Saving resources for ri-orthodoxy") | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control == 0) | |
(or | |
(or | |
(goal unit-goal monk) | |
(goal ranged-unit-type-goal monk) | |
) | |
(players-unit-type-count focus-player war-elephant-line > 12) | |
) | |
(unit-type-count-total monk > 5) | |
(or | |
(or | |
(research-available ri-theocracy) | |
(research-available ri-illumination) | |
) | |
(research-available ri-block-printing) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
(defrule | |
(current-age == imperial-age) | |
(unit-type-count monastery-class > 20) | |
(strategic-number sn-resource-control == 0) | |
(goal unit-goal monk) | |
(gold-amount < 300) | |
(unit-type-count-total trebuchet-set == 0) | |
(building-type-count castle > 0) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
(defrule | |
(current-age == imperial-age) | |
(unit-type-count monastery-class > 20) | |
(goal unit-goal monk) | |
(wood-amount < 200) | |
(unit-type-count-total trebuchet-set == 0) | |
(building-type-count castle > 0) | |
=> | |
(set-goal save-wood-goal 1) | |
) | |
(defrule | |
(research-available imperial-age) | |
(strategic-number sn-resource-control == 0) | |
(goal unit-goal monk) | |
(unit-type-count-total monk > 20) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
;debug (chat-to-player my-player-number "Saving resources for imperial-age") | |
) | |
(defrule | |
(food-amount >= 175) | |
(or | |
(goal train-civ-goal ri-crossbow) | |
(and | |
(food-amount >= 265) | |
(goal train-civ-goal ri-pikeman) | |
) | |
) | |
=> | |
(set-goal train-civ-goal 1) | |
) | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(strategic-number sn-resource-control < 2) | |
(civilian-population < fourty-percent-pop) | |
(population >= eighty-five-percent-pop) | |
(game-time < 1200) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
#load-if-defined DARK-AGE-START | |
(defrule | |
(strategic-number sn-resource-control > 2) | |
(food-amount > 2000) | |
(gold-amount > 2000) | |
(wood-amount > 2000) | |
=> | |
(set-strategic-number sn-resource-control 0); resource control not needed in DM | |
(set-goal save-wood-goal 0) | |
) | |
#end-if | |
#end-if | |
#load-if-not-defined WONDER-RACE | |
(defrule | |
(research-completed ri-coinage) | |
(food-amount > 170) | |
(taunt-detected any-human-ally 38) | |
=> | |
(tribute-to-player this-any-ally food 100) | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(research-completed ri-coinage) | |
(wood-amount > 200) | |
(taunt-detected any-human-ally 38) | |
=> | |
(tribute-to-player this-any-ally wood 100) | |
) | |
(defrule | |
(research-completed ri-coinage) | |
(gold-amount > 150) | |
(taunt-detected any-human-ally 38) | |
=> | |
(tribute-to-player this-any-ally gold 100) | |
) | |
(defrule | |
(research-completed ri-coinage) | |
(stone-amount > 220) | |
(taunt-detected any-human-ally 38) | |
=> | |
(tribute-to-player this-any-ally stone 100) | |
) | |
(defrule | |
(or | |
(or | |
(players-tribute-memory any-computer-ally food == 100) | |
(players-tribute-memory any-computer-ally food == 200) | |
) | |
(players-tribute-memory any-computer-ally gold == 100) | |
) | |
(players-population any-computer-ally >= del-civ-pop) | |
=> | |
(clear-tribute-memory every-computer food) | |
(clear-tribute-memory every-computer gold) | |
(enable-timer tribute-timer 2); some scripts send only 100 of one res, even if they have tons of it, so keep asking if necessary. | |
) | |
(defrule | |
(game-time > 1200) | |
(building-type-count town-center > 0) | |
(or | |
(unit-type-count villager < 15) | |
(and | |
(players-civilian-population any-ally > fourty-percent-pop) | |
(or | |
(unit-type-count villager < twenty-five-percent-pop) | |
(players-population any-ally > eighty-five-percent-pop) | |
) | |
) | |
) | |
(unit-type-count villager < fourty-percent-pop) | |
(food-amount < 250) | |
(goal under-attack-goal 0) | |
=> | |
(set-goal tribute-goal 3) | |
) | |
(defrule | |
(building-type-count town-center >= tc-level-two) | |
(players-building-type-count any-ally market > 0) | |
(game-time > 1800) | |
(or | |
(unit-type-count villager < 90) | |
(strategic-number sn-resource-control == 2) | |
) | |
(food-amount < 100) | |
(gold-amount > 200) | |
=> | |
(set-goal tribute-goal 3) | |
) | |
(defrule | |
(building-type-count town-center >= tc-level-two) | |
(players-building-type-count any-ally market > 0) | |
(strategic-number sn-resource-control == 2) | |
(food-amount > 500) | |
(gold-amount < 200) | |
=> | |
(set-goal tribute-goal 5) | |
) | |
(defrule | |
(players-building-type-count any-ally market > 0) | |
(strategic-number sn-resource-control < 4) | |
(food-amount > 500) | |
(gold-amount > 400) | |
(wood-amount < 150) | |
=> | |
(set-goal tribute-goal 4) | |
) | |
(defrule | |
(taunt-detected any-ally 3) | |
(food-amount > 1000) | |
(strategic-number sn-resource-control < 1) | |
(research-completed ri-banking) | |
(building-type-count market > 0) | |
(current-age == imperial-age) | |
=> | |
(acknowledge-taunt this-any-ally 3) | |
(tribute-to-player this-any-ally food 400) | |
(chat-to-player-using-id this-any-ally 22077) | |
(chat-local-to-self "tribute food")) | |
(defrule | |
(taunt-detected any-ally 3) | |
(food-amount > 300) | |
(or (research-completed ri-banking) | |
(food-amount > 500)) | |
(strategic-number sn-resource-control < 1) | |
(building-type-count market > 0) | |
=> | |
(acknowledge-taunt this-any-ally 3) | |
(tribute-to-player this-any-ally food 100) | |
(chat-to-player-using-id this-any-ally 22077) | |
(chat-local-to-self "tribute food")) | |
(defrule | |
(taunt-detected any-ally 4) | |
(wood-amount > 900) | |
(goal save-wood-goal 0) | |
(research-completed ri-banking) | |
(building-type-count market > 0) | |
=> | |
(acknowledge-taunt this-any-ally 4) | |
(tribute-to-player this-any-ally wood 400) | |
(chat-to-player-using-id this-any-ally 22076) | |
(chat-local-to-self "tribute wood")) | |
(defrule | |
(taunt-detected any-ally 4) | |
(wood-amount > 300) | |
(or (goal save-wood-goal 0) | |
(wood-amount > 1300)); just to be safe | |
(building-type-count market > 0) | |
=> | |
(acknowledge-taunt this-any-ally 4) | |
(tribute-to-player this-any-ally wood 100) | |
(chat-to-player-using-id this-any-ally 22076) | |
(chat-local-to-self "tribute wood")) | |
(defrule | |
(taunt-detected any-ally 5) | |
(gold-amount > 1500) | |
(research-completed ri-banking) | |
(building-type-count market > 0) | |
=> | |
(acknowledge-taunt this-any-ally 5) | |
(tribute-to-player this-any-ally gold 400) | |
(chat-to-player-using-id this-any-ally 22078) | |
(chat-local-to-self "tribute gold")) | |
(defrule | |
(taunt-detected any-ally 5) | |
(strategic-number sn-resource-control < 1) | |
(gold-amount > 300) | |
(or (research-completed ri-banking) | |
(gold-amount > 800)) | |
(building-type-count market > 0) | |
=> | |
(acknowledge-taunt this-any-ally 5) | |
(tribute-to-player this-any-ally gold 100) | |
(chat-to-player-using-id this-any-ally 22078) | |
(chat-local-to-self "tribute gold")) | |
(defrule | |
(taunt-detected any-ally 6) | |
(building-type-count-total town-center > 0) | |
(or (stone-amount > 750) | |
(or (building-type-count-total castle >= 4) | |
(and (players-building-type-count any-ally town-center == 0) | |
(stone-amount >= 130)))) | |
(building-type-count market > 0) | |
=> | |
(acknowledge-taunt this-any-ally 6) | |
(tribute-to-player this-any-ally stone 100) | |
(chat-to-player-using-id this-any-ally 22079) | |
(chat-local-to-self "tribute stone")) | |
(defrule | |
(or (taunt-detected any-ally 3) | |
(or (taunt-detected any-ally 4) | |
(or (taunt-detected any-ally 5) | |
(taunt-detected any-ally 6)))) | |
(building-type-count market == 0) | |
=> | |
(chat-to-player-using-id this-any-ally 22164) | |
(acknowledge-taunt this-any-ally 3) | |
(acknowledge-taunt this-any-ally 4) | |
(acknowledge-taunt this-any-ally 5) | |
(acknowledge-taunt this-any-ally 6) | |
) | |
(defrule | |
(or (taunt-detected any-ally 3) | |
(or (taunt-detected any-ally 4) | |
(or (taunt-detected any-ally 5) | |
(taunt-detected any-ally 6)))) | |
=> | |
(chat-to-allies-using-id 22118); "Alas, I cannot help that at this time." | |
(acknowledge-taunt this-any-ally 3) | |
(acknowledge-taunt this-any-ally 4) | |
(acknowledge-taunt this-any-ally 5) | |
(acknowledge-taunt this-any-ally 6) | |
) | |
(defrule | |
(up-compare-goal strategy-goal != sling) | |
(taunt-detected any-ally 130); cooperate with barbie's share resources | |
(wood-amount < 400) | |
(gold-amount > 800) | |
(food-amount > 1000) | |
=> | |
(chat-to-allies-using-id 22123) | |
(acknowledge-taunt this-any-ally 130) | |
) | |
(defrule | |
(up-compare-goal strategy-goal != sling) | |
(nand | |
(goal under-attack-goal 1) | |
(population < 45) | |
) | |
(taunt-detected any-ally 130) | |
(or | |
(food-amount < 1000) | |
(or | |
(wood-amount < 800) | |
(gold-amount < 700) | |
) | |
) | |
(building-type-count-total town-center > 0) | |
=> | |
(chat-to-allies "1") | |
(acknowledge-taunt this-any-ally 130) | |
(acknowledge-taunt my-player-number 1) | |
) | |
(defrule | |
(taunt-detected any-ally 130); if we need them, the other rules above would've triggered | |
=> | |
(chat-to-allies "2") | |
(acknowledge-taunt this-any-ally 130) | |
(acknowledge-taunt my-player-number 2) | |
) | |
(defrule | |
(up-timer-status tribute-timer != timer-running) | |
(goal tribute-goal 3) | |
(players-building-type-count any-ally market > 0) | |
=> | |
(enable-timer tribute-timer 120); 30 | |
(chat-to-allies-using-id 22122) | |
) | |
(defrule | |
(up-timer-status tribute-timer != timer-running) | |
(goal tribute-goal 4) | |
(players-building-type-count any-ally market > 0) | |
=> | |
(enable-timer tribute-timer 120); 30 | |
(chat-to-allies-using-id 22123) | |
) | |
(defrule | |
(up-timer-status tribute-timer != timer-running) | |
(goal tribute-goal 5) | |
(players-building-type-count any-ally market > 0) | |
=> | |
(enable-timer tribute-timer 120); 30 | |
(chat-to-allies-using-id 22124) | |
) | |
(defrule | |
(up-timer-status tribute-timer != timer-running) | |
(goal tribute-goal 6) | |
(players-building-type-count any-ally market > 0) | |
=> | |
(enable-timer tribute-timer 120); 30 | |
(chat-to-allies-using-id 22125) | |
) | |
#end-if ; NOT WONDER-RACE | |
;********************BASICS ******************** | |
(defrule | |
(resource-found food) | |
; (goal buildmill yes) | |
(building-type-count town-center >= 1) | |
(game-time >= 120) | |
(or (unit-type-count-total villager >= 18) | |
(or (wood-amount >= 200) | |
(building-type-count-total lumber-camp >= 1))) | |
(building-type-count-total mill < 1) | |
(can-build mill) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mill) | |
; (chat-local-to-self "Building emergency mill. 1") | |
(disable-self)) | |
(defrule | |
; (goal buildmill yes) | |
(building-type-count town-center >= 1) | |
(game-time >= 125) | |
(military-population >= 1); scout | |
(or (unit-type-count-total villager >= 18) | |
(or (wood-amount >= 200) | |
(building-type-count-total lumber-camp >= 1))) | |
(building-type-count-total mill < 1) | |
(can-build mill) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(set-strategic-number sn-mill-max-distance 17) | |
(build mill) | |
; (chat-local-to-self "Building emergency mill. 2") | |
(disable-self)) | |
(defrule | |
; (goal buildmill yes) | |
(building-type-count town-center >= 1) | |
(game-time >= 130) | |
(military-population <= 0); no scout | |
(or (unit-type-count-total villager >= 18) | |
(or (wood-amount >= 200) | |
(building-type-count-total lumber-camp >= 1))) | |
(building-type-count-total mill < 1) | |
(can-build mill) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(set-strategic-number sn-mill-max-distance 8) | |
(build mill) | |
; (chat-local-to-self "Building emergency mill. 3") | |
(disable-self)) | |
(defrule | |
; (goal buildmill yes) | |
(building-type-count town-center >= 1) | |
(game-time >= 150) | |
(or (unit-type-count-total villager >= 18) | |
(or (wood-amount >= 200) | |
(building-type-count-total lumber-camp >= 1))) | |
(building-type-count-total mill < 1) | |
(can-build mill) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(set-strategic-number sn-mill-max-distance 8) | |
(build mill) | |
; (chat-local-to-self "Building emergency mill. 4") | |
(disable-self)) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(building-type-count town-center > 0) | |
(building-type-count-total mill == 0) | |
(resource-found food) | |
(or (wood-amount >= 300) | |
(or | |
(or | |
(unit-type-count male-forager > 0) | |
(unit-type-count female-forager > 0) | |
) | |
(and | |
(death-match-game) | |
(current-age == dark-age) | |
) | |
)) | |
(can-build mill) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mill) | |
) | |
(defrule | |
(current-age == dark-age) | |
(building-type-count town-center > 0) | |
(building-type-count-total mill == 0); emergency mill for no berries | |
(game-time > 180) | |
(or | |
(unit-type-count-total villager >= 20); some other foood sources available | |
(and | |
(strategic-number sn-mill-max-distance > 30) | |
(building-type-count lumber-camp > 0) | |
) | |
) | |
(or | |
(wood-amount > 200) | |
(building-type-count lumber-camp > 0) | |
) | |
(can-build mill) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mill) | |
) | |
#load-if-defined SCANDANAVIA-MAP | |
(defrule | |
(building-type-count town-center > 0) | |
(strategic-number sn-current-age == dark) | |
(dropsite-min-distance deer-hunting > 8) | |
(dropsite-min-distance deer-hunting < 38) | |
(can-build mill) | |
(building-type-count-total mill < 1) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 1); test | |
(set-strategic-number sn-preferred-mill-placement 1); mill deer | |
(build mill) | |
) | |
#end-if | |
#load-if-not-defined DEATH-MATCH | |
(defrule | |
(building-type-count town-center >= 1); this idea from ER rarely fails | |
(game-time >= 15); increase lumber camp distance when we still found no wood after 15s | |
(or ; so the scout has some time to find a forest | |
(not (resource-found wood)) | |
(building-type-count-total stone-wall > 15); also increase in walled maps, as we may find the forest with the wall | |
) | |
(strategic-number sn-mill-max-distance < 30) | |
=> | |
(set-strategic-number sn-camp-max-distance 18) | |
(disable-self) | |
) | |
(defrule | |
(building-type-count town-center >= 1) | |
(game-time >= 18); and even further when still no wood after 18s | |
(not (resource-found wood)) | |
(strategic-number sn-mill-max-distance < 30) | |
=> | |
(set-strategic-number sn-camp-max-distance 21) | |
(disable-self) | |
) | |
(defrule | |
(building-type-count-total lumber-camp > 0) | |
(building-type-count-total stone-wall < 15) | |
(or (dropsite-min-distance gold > 12) | |
(building-type-count-total mining-camp > 0)) | |
=> | |
(set-strategic-number sn-maximum-food-drop-distance 15) | |
(set-strategic-number sn-camp-max-distance 30) | |
(set-strategic-number sn-wood-dropsite-distance 3); move wood gatherers from far stragglers to the camp | |
(disable-self) | |
) | |
(defrule | |
(building-type-count-total lumber-camp > 1) | |
(building-type-count-total mining-camp == 0) | |
(dropsite-min-distance gold > 3) | |
(dropsite-min-distance gold < 12); close gold like in gold rush maps | |
=> | |
(set-strategic-number sn-camp-max-distance 12); so only a small camp max distance is required, else the gold will be skipped. | |
(set-strategic-number sn-wood-dropsite-distance 3) | |
(disable-self) | |
) | |
(defrule | |
(current-age == dark-age); don't trigger this later when initial gold is gone. | |
(building-type-count town-center >= 1); mainly a fix for nomad map where gold may be farther away | |
(building-type-count-total lumber-camp > 0); as the computer doesn't care about resources when placing the initial TC. | |
(unit-type-count villager >= 24) | |
(dropsite-min-distance gold > 24) | |
(dropsite-min-distance gold < 64) | |
=> | |
(set-strategic-number sn-camp-max-distance 60) | |
(disable-self) | |
) | |
(defrule | |
; (up-pending-objects c: lumber-camp < 1) | |
(game-time > lumber-delay) | |
(resource-found wood) | |
(or (dropsite-min-distance wood >= 7) | |
(or (and (wood-amount >= 300) | |
(strategic-number sn-wood-gatherer-percentage >= 7)) | |
(or (building-type-count-total mill > 0) | |
(and (wood-amount > 200) | |
(strategic-number sn-mill-max-distance > 30))))) | |
(building-type-count-total lumber-camp == 0) | |
(can-build lumber-camp) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 1) | |
(build lumber-camp) | |
) | |
#end-if ; no DM | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
(defrule | |
(resource-found wood) | |
(unit-type-count villager >= 20) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(dropsite-min-distance wood < 4) | |
(wood-amount < 160) | |
(strategic-number sn-current-age == dark) | |
=> | |
(up-jump-rule 1) | |
) | |
(defrule ;build additional lumber camps | |
; (up-pending-objects c: lumber-camp < 1) | |
(resource-found wood) | |
(unit-type-count villager >= 20) | |
(or | |
(building-type-count-total lumber-camp < 2) | |
(unit-type-count villager >= 45) | |
) | |
(or | |
(building-type-count-total lumber-camp < 3) | |
(unit-type-count villager >= 60) | |
) | |
(building-type-count-total lumber-camp < 5) | |
(can-build lumber-camp) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 1) | |
(build lumber-camp) | |
(set-strategic-number sn-dropsite-separation-distance 3) | |
(set-strategic-number sn-maximum-wood-drop-distance 30) | |
) | |
#end-if | |
#end-if | |
; Lumber Camp Replacement when either fast when 1st lumber-camp placed really bad or in feudal-age when flushing or after castle-age is available | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(or (goal increase-town-size-goal 0) | |
(current-age <= feudal-age)) | |
(building-type-count town-center > 0) | |
(or (and (building-type-count lumber-camp > 0) | |
(dropsite-min-distance wood > 3)) | |
(and (unit-type-count-total villager >= villager-feudal) | |
(building-type-count-total lumber-camp == 0))); debug for no placement | |
(strategic-number sn-camp-max-distance < 35) | |
(can-build lumber-camp) | |
=> | |
(set-strategic-number sn-camp-max-distance 35) | |
(set-strategic-number sn-dropsite-separation-distance 3) | |
(chat-to-player my-player-number "bad lumber camp placement!: camp-max-distance 35") | |
) | |
(defrule | |
; (up-pending-objects c: mining-camp == 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or (up-compare-goal strategy-goal != flush) | |
(building-type-count-total dock > 0)) | |
(resource-found gold) | |
(strategic-number sn-current-age >= df-transit) | |
(can-build mining-camp) | |
(building-type-count-total mining-camp == 0) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mining-camp) | |
) | |
#end-if ; NOT PIDM | |
(defrule | |
; (up-pending-objects c: mining-camp == 0) | |
(strategic-number sn-current-age >= df-transit) | |
(resource-found gold) | |
(goal strategy-goal flush) | |
(or | |
(and | |
(or | |
(building-type-count-total stable > 0) | |
(building-type-count-total archery-range > 1) | |
) | |
(wood-amount > 135) | |
) | |
(and | |
(goal unit-goal militiaman-line) | |
(building-type-count-total barracks > 0) | |
) | |
) | |
(can-build mining-camp) | |
(building-type-count-total mining-camp == 0) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mining-camp) | |
) | |
(defrule | |
; (up-pending-objects c: mining-camp == 0) | |
(strategic-number sn-current-age >= feudal) | |
(resource-found gold) | |
(strategic-number sn-minimum-water-body-size-for-dock > water-mixed) | |
(building-type-count-total blacksmith > 0) | |
(building-type-count-total market > 0) | |
(can-build mining-camp) | |
(building-type-count-total mining-camp == 0) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mining-camp) | |
) | |
(defrule | |
(up-pending-objects c: mining-camp == 0) | |
(resource-found gold) | |
(or | |
(or | |
(unit-type-count-total 229 >= 1); dead miners detected | |
(unit-type-count-total 221 >= 1) | |
) | |
(strategic-number sn-gold-gatherer-percentage > 30) | |
) | |
(unit-type-count-total villager > 33) | |
(can-build mining-camp) | |
(building-type-count-total mining-camp < 2) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mining-camp) | |
(set-strategic-number sn-maximum-stone-drop-distance 40) | |
(set-strategic-number sn-stone-dropsite-distance 40) | |
(set-strategic-number sn-maximum-gold-drop-distance 3) | |
(set-strategic-number sn-gold-dropsite-distance 3) | |
) | |
(defrule | |
(up-pending-objects c: lumber-camp < 1) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(resource-found wood) | |
(unit-type-count 979 > 0); lumberjack | |
(building-type-count-total lumber-camp < 1) | |
(or | |
(unit-type-count villager > 14) | |
(strategic-number sn-current-age > dark) | |
) | |
(wood-amount > 200) | |
(can-build lumber-camp) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 1) | |
(build lumber-camp) | |
) | |
(defrule | |
(up-pending-objects c: mining-camp < 1) | |
(resource-found gold) | |
(dropsite-min-distance gold > 5);rebuild bad camps | |
(dropsite-min-distance gold < 480) | |
(building-type-count mining-camp > 0) | |
(can-build mining-camp) | |
(or | |
(building-type-count mining-camp < 5) | |
(and | |
(strategic-number sn-camp-max-distance > 45) | |
(dropsite-min-distance gold > 13); don't spam camps if it's in an unreachable spot | |
) | |
) | |
(building-type-count-total mining-camp < 15) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mining-camp) | |
(set-strategic-number sn-dropsite-separation-distance 6) | |
) | |
(defrule | |
(up-pending-objects c: mining-camp < 1) | |
(resource-found stone) | |
(dropsite-min-distance stone > 5) | |
(dropsite-min-distance stone < 480) | |
(building-type-count mining-camp > 1) | |
(or | |
(building-type-count mining-camp < 4) | |
(and | |
(strategic-number sn-camp-max-distance > 45) | |
(dropsite-min-distance stone > 13) | |
) | |
) | |
(can-build mining-camp) | |
(strategic-number sn-stone-gatherer-percentage > 0) | |
(building-type-count-total mining-camp < 15) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mining-camp) | |
(set-strategic-number sn-dropsite-separation-distance 6) | |
) | |
(defrule | |
(up-pending-objects c: mining-camp < 1) | |
(wood-amount > 200) | |
(dropsite-min-distance gold > 1); build subsequent mining camps to avoid crowd | |
(dropsite-min-distance gold < 480); check for gold still on the map | |
(civilian-population > 80) | |
(game-time < 2400) | |
(can-build mining-camp) | |
(building-type-count-total mining-camp < 5) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(set-strategic-number sn-camp-max-distance 45) | |
(set-strategic-number sn-dropsite-separation-distance 12) | |
(build mining-camp) | |
) | |
#load-if-not-defined WONDER-RACE | |
(defrule | |
(up-pending-objects c: mining-camp < 1) | |
(strategic-number sn-resource-control != battering-ram) | |
(strategic-number sn-resource-control != ri-elite-skirmisher) | |
(or | |
(or | |
(up-research-status c: ri-bow-saw >= research-pending) | |
(building-type-count town-center >= tc-level-three) | |
) | |
(or | |
(strategic-number sn-stone-gatherer-percentage > 0) | |
(wood-amount > 210) | |
) | |
) | |
(stone-amount < 100) | |
(current-age-time > 90) | |
(building-type-count-total mining-camp < 4) | |
(dropsite-min-distance stone > 4) | |
(can-build mining-camp) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mining-camp) | |
) | |
#end-if | |
#load-if-defined SARACEN-CIV | |
(defrule | |
(up-pending-objects c: mining-camp < 1) | |
(strategic-number sn-resource-control <= 2) | |
(building-type-count-total market > 0) | |
(building-type-count-total blacksmith > 0) | |
(commodity-selling-price stone > 100) | |
(building-type-count-total mining-camp < 4) | |
(or | |
(and | |
(building-type-count-total mining-camp < 2) | |
(dropsite-min-distance stone > 5) | |
) | |
(and | |
(current-age == castle-age) | |
(building-type-count stable > 1) | |
) | |
) | |
(can-build mining-camp) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mining-camp) | |
) | |
#end-if | |
(defrule | |
(up-pending-objects c: mining-camp < 1) | |
(or | |
(goal unit-goal my-unique-unit-line) | |
(goal unit-goal wonder) | |
) | |
(building-type-count-total blacksmith > 0) | |
(building-type-count-total mining-camp == 1) | |
(dropsite-min-distance stone > 3) | |
(can-build mining-camp) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mining-camp) | |
) | |
#load-if-not-defined DEATH-MATCH | |
(defrule | |
(or | |
(game-time > 2100) | |
(dropsite-min-distance wood > 15) | |
) | |
(strategic-number sn-camp-max-distance < 60) | |
=> | |
(set-strategic-number sn-camp-max-distance 60) | |
) | |
(defrule | |
(game-time > 2700) | |
(goal ffa-game-goal -1) | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-camp-max-distance < 90) | |
=> | |
(set-strategic-number sn-camp-max-distance 90) | |
) | |
#end-if | |
(defrule | |
(cc-players-unit-type-count 0 tree-class < heavy-wood) | |
(or | |
(game-time > 3600); 60min | |
(death-match-game) | |
) | |
(or | |
(goal ffa-game-goal -1) | |
(game-time > 5400); 90 min | |
) | |
(game-time > 900) | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-camp-max-distance < 144) | |
=> | |
(set-strategic-number sn-camp-max-distance 144) | |
) | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
(defrule | |
(up-pending-objects c: lumber-camp < 1) | |
(dropsite-min-distance wood < 480) | |
(dropsite-min-distance wood > 3) | |
(strategic-number sn-current-age >= fc-transit) | |
(can-build lumber-camp) | |
; bug (cc-players-unit-type-count 0 tree-class > 25) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 1) | |
(build lumber-camp) | |
(set-strategic-number sn-dropsite-separation-distance 6) | |
) | |
(defrule | |
(up-pending-objects c: lumber-camp < 1) | |
(unit-type-count villager >= 75) | |
(can-build lumber-camp) | |
(dropsite-min-distance wood >= 0) | |
(dropsite-min-distance wood < 480) | |
(timer-triggered lumber-timer) | |
; bug (cc-players-unit-type-count 0 tree-class > 25) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 1) | |
(build lumber-camp) | |
(enable-timer lumber-timer 180) | |
(set-strategic-number sn-dropsite-separation-distance 4) | |
) | |
(defrule | |
(up-pending-objects c: lumber-camp < 1) | |
(or | |
(unit-type-count-total 219 >= 1) | |
(unit-type-count-total 228 >= 1) | |
) | |
(can-build lumber-camp) | |
(dropsite-min-distance wood > 1) | |
(dropsite-min-distance wood < 480) | |
(timer-triggered lumber-timer) | |
; bug (cc-players-unit-type-count 0 tree-class > 25) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 1) | |
(build lumber-camp) | |
(enable-timer lumber-timer 120) | |
(set-strategic-number sn-dropsite-separation-distance 12) | |
) | |
(defrule | |
(up-pending-objects c: lumber-camp == 0) | |
(resource-found wood) | |
(unit-type-count-total villager >= 10) | |
(dropsite-min-distance wood > 5) | |
(dropsite-min-distance wood < 255) | |
; bug (cc-players-unit-type-count 0 tree-class > 25) | |
(building-type-count-total mill >= 1) | |
(building-type-count-total town-center >= 1) | |
; (strategic-number sn-camp-max-distance < 30) | |
(strategic-number sn-camp-max-distance <= 476) | |
(can-build lumber-camp) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 1) | |
; (set-strategic-number sn-camp-max-distance 30) | |
(up-modify-sn sn-camp-max-distance c:+ 4) | |
(chat-local-to-self "Wood far away: New camp.") | |
(build lumber-camp)) | |
(defrule | |
(building-type-count-total town-center == 1) | |
(or | |
(goal strategy-goal flush) | |
(building-type-count farm > 18) | |
) | |
(building-type-count farm > 15) | |
(building-type-count-total mill < 2) | |
(can-build mill) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(set-strategic-number sn-mill-max-distance 17) | |
(set-strategic-number sn-dropsite-separation-distance 10) | |
(build mill) | |
) | |
(defrule | |
(building-type-count farm > 24) | |
(or | |
(building-type-count farm > 27) | |
(building-type-count-total town-center == 1) | |
) | |
(building-type-count-total mill < 3) | |
(can-build mill) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(set-strategic-number sn-mill-max-distance 20) | |
(set-strategic-number sn-dropsite-separation-distance 10) | |
(set-strategic-number sn-preferred-mill-placement 0) | |
(build mill) | |
) | |
(defrule | |
(building-type-count farm > 33) | |
(or | |
(building-type-count-total mill < 4) | |
(building-type-count farm > 45) | |
) | |
(building-type-count-total mill < 5) | |
(can-build mill) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(set-strategic-number sn-mill-max-distance 23) | |
(set-strategic-number sn-dropsite-separation-distance 10) | |
(build mill) | |
) | |
(defrule | |
(up-pending-objects c: lumber-camp < 1) | |
(resource-found wood) | |
(or (unit-type-count-total 219 >= 1) | |
(unit-type-count-total 228 >= 1)) | |
(or (building-type-count-total blacksmith > 0) | |
(strategic-number sn-current-age >= fc-transit)) | |
(game-time < 1800) | |
(can-build lumber-camp) | |
(building-type-count-total lumber-camp < 5) | |
(strategic-number sn-camp-max-distance <= 35) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 1) | |
(build lumber-camp) | |
(set-strategic-number sn-camp-max-distance 35) | |
(set-strategic-number sn-dropsite-separation-distance 10) | |
(chat-to-player my-player-number "Dead Lumberjacks found, relocate camp!") | |
) | |
#end-if | |
#end-if | |
#load-if-not-defined DIFFICULTY-MODERATE | |
#load-if-not-defined DIFFICULTY-HARD | |
#load-if-not-defined DIFFICULTY-HARDEST | |
(defrule ;build additional lumber camps | |
; (up-pending-objects c: lumber-camp < 1) | |
(resource-found wood) | |
(unit-type-count villager >= 15) | |
(building-type-count-total lumber-camp < 2) | |
(building-type-count-total mill > 0) | |
(can-build lumber-camp) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 1) | |
(build lumber-camp) | |
(set-strategic-number sn-dropsite-separation-distance 3) | |
(set-strategic-number sn-maximum-wood-drop-distance 30) | |
) | |
(defrule | |
(up-pending-objects c: lumber-camp < 1) | |
(dropsite-min-distance wood < 480) | |
(dropsite-min-distance wood > 7); on low difficulty only rebuild really bad camps | |
(timer-triggered lumber-timer) | |
(can-build lumber-camp) | |
; bug (cc-players-unit-type-count 0 tree-class > 25) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 1) | |
(build lumber-camp) | |
(enable-timer lumber-timer 190) | |
) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(or | |
(strategic-number sn-current-age == dark) | |
(civ-selected japanese) | |
) | |
(or | |
(unit-type-count male-hunter >= 1) | |
(unit-type-count female-hunter >= 1) | |
) | |
(can-build mill) | |
(building-type-count-total mill >= 1) | |
(building-type-count-total lumber-camp >= 1) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 1); test | |
(set-strategic-number sn-mill-max-distance 30) | |
(set-strategic-number sn-preferred-mill-placement 1); mill deer | |
(build mill) | |
(disable-self) | |
) | |
#load-if-not-defined DEATH-MATCH | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(or (unit-type-count villager > 13) | |
(wood-amount >= 130)) | |
(or (unit-type-count villager < 20) | |
(building-type-count-total lumber-camp > 1)) | |
(or (unit-type-count villager < 30) | |
(wood-amount >= 130)) | |
(idle-farm-count < 1) | |
(building-type-count-total lumber-camp > 0) | |
=> | |
(set-goal farm-goal 1) | |
) | |
(defrule | |
(strategic-number sn-current-age == df-transit) | |
(wood-amount >= 385);175stable+150bs+60farm | |
(idle-farm-count < 1) | |
(building-type-count-total lumber-camp > 0) | |
=> | |
(set-goal farm-goal 1) | |
) | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(building-type-count-total market >= 1) | |
(or (building-type-count-total blacksmith >= 1) | |
(wood-amount >= 210)); test | |
(wood-amount >= 120) | |
(idle-farm-count < 1) | |
(building-type-count-total lumber-camp > 0) | |
=> | |
(set-goal farm-goal 1) | |
) | |
#end-if ; NOT DM | |
#load-if-not-defined WONDER-RACE | |
(defrule | |
(goal strategy-goal sling) | |
(strategic-number sn-current-age >= feudal) | |
(or (not (research-available ri-horse-collar)) | |
(research-completed ri-horse-collar)); just to be sure | |
(idle-farm-count < 2) | |
=> | |
(set-goal farm-goal 1) | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(strategic-number sn-current-age == feudal) | |
(or (or (and (building-type-count-total archery-range > 1) | |
(building-type-count-total blacksmith > 0)) | |
(goal unit-goal militiaman-line)) | |
(building-type-count-total stable > 0)) | |
(building-type-count-total archery-range > 0) | |
=> | |
(set-goal farm-goal 1) | |
) | |
(defrule | |
(or (goal strategy-goal flush) | |
(food-amount < 400)) | |
(strategic-number sn-current-age == feudal) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(up-compare-goal position-goal == flank); hm | |
(idle-farm-count < 1) | |
(wood-amount > 150) | |
=> | |
(set-goal strategy-goal flush) | |
(set-goal farm-goal 1) | |
) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
(not (research-available ri-horse-collar)) | |
(or (or (building-type-count-total archery-range > 2) | |
(building-type-count-total stable > 1)) | |
(and (goal unit-goal eagle-warrior) | |
(building-type-count-total barracks > 0))) | |
(idle-farm-count < 2) | |
=> | |
(set-goal farm-goal 1) | |
) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
(up-research-status c: ri-horse-collar >= research-pending) | |
(building-type-count-total farm < farm-count) | |
(nor (or (goal unit-goal my-unique-unit-line); delay farms until castle age to have more workers for the castle with uu startegy | |
(goal control-goal shot)); get food from ally | |
(or (goal unit-goal knight); use rule above | |
(goal unit-goal default-ranged))) | |
(idle-farm-count < 2) | |
=> | |
(set-goal farm-goal 1) | |
) | |
#load-if-not-defined SARACEN-CIV ;buy food with them instead of farming | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(or (and (goal strategy-goal rush) | |
(building-type-count-total blacksmith > 0)) | |
(game-time > 1200)) | |
(not (goal unit-goal my-unique-unit-line)) | |
(idle-farm-count < 2) | |
=> | |
(set-goal farm-goal 1) | |
) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
(building-type-count-total blacksmith > 0) | |
(or (or (goal unit-goal mix) | |
(goal unit-goal skirmisher)) | |
(and (goal strategy-goal boom) | |
(up-research-status c: ri-horse-collar >= research-pending))) | |
(building-type-count-total farm < 14) | |
=> | |
(set-goal farm-goal 1) | |
) | |
(defrule | |
(building-type-count town-center >= 1) | |
(strategic-number sn-current-age >= castle) | |
(or (idle-farm-count < 2) | |
(or (building-type-count-total town-center >= tc-level-three) | |
(and (building-type-count-total town-center >= tc-level-two) | |
(or (wood-amount > 335); 275 for 3rd TC + 60 | |
(goal strategy-goal boom))))); build as many farms as possible after 2nd TC | |
=> | |
(set-goal farm-goal 1) | |
) | |
#else | |
(defrule | |
(building-type-count town-center >= 1) | |
(strategic-number sn-current-age >= castle) | |
(or (idle-farm-count < 2) | |
(building-type-count-total town-center >= tc-level-three)) | |
(or (or (commodity-buying-price food > 130) | |
(commodity-selling-price stone < 100)) | |
(or (or (goal strategy-goal boom) | |
(building-type-count farm < 8)) | |
(game-time > 1800))) | |
=> | |
(set-goal farm-goal 1) | |
) | |
#end-if ;SARACEN-CIV | |
#end-if ;no WONDER-RACE | |
(defrule | |
(or (and (strategic-number sn-current-age > feudal) | |
(building-type-count-total farm < 8)) | |
(and (building-type-count-total lumber-camp > 1) | |
(building-type-count-total farm < 4))); test | |
(food-amount < 50) | |
(idle-farm-count <= 0) | |
(building-type-count-total lumber-camp > 0) | |
=> | |
(set-goal farm-goal 1)) | |
(defrule | |
(strategic-number current-age == castle) | |
(or (goal strategy-goal fast-imp) | |
(goal strategy-goal boom)) | |
(not (research-available imperial-age)) | |
(wood-amount < 200) | |
(food-amount > 400) | |
(gold-amount > 400) | |
=> | |
(set-goal farm-goal 0) | |
) | |
#load-if-not-defined TURKISH-CIV | |
(defrule | |
(strategic-number current-age >= ci-transit) | |
(goal unit-goal gunpowder-class) | |
(building-type-count-total university == 0) | |
(not (research-completed ri-chemistry)) | |
(wood-amount < 200) | |
=> | |
(set-goal farm-goal 0) | |
) | |
#end-if | |
(defrule | |
(or (unit-type-count female-forager > 0) | |
(unit-type-count male-forager > 0)) | |
(building-type-count mill == 1) | |
(sheep-and-forage-too-far); save for 2nd mill on maps with more berries, eg. yucatan | |
(wood-amount < 100) | |
=> | |
(set-goal farm-goal 0) | |
) | |
(defrule | |
(goal farm-goal 1) | |
(current-age == dark-age) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(or (wood-amount < 210); place farms only if still enough wood left for dock | |
(and (building-type-count-total dock > 0) | |
(wood-amount < 135))) | |
=> | |
(set-goal farm-goal 0) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(or (and (strategic-number sn-current-age == df-transit) | |
(or (unit-type-count male-hunter > 0) | |
(unit-type-count female-hunter > 0))) | |
(or (and (current-age == feudal-age) | |
(up-compare-goal strategy-goal != flush)) | |
(and (current-age >= castle-age) | |
(idle-farm-count > 2)))) | |
=> | |
(set-goal farm-goal 0) | |
) | |
(defrule | |
(strategic-number sn-current-age == df-transit) | |
(wood-amount < 435); feudal buildings + (wheelbarrow) + farm | |
(or (building-type-count farm >= 4) | |
(idle-farm-count >= 1)); probably not necessary, but meh | |
(up-compare-goal farm-goal != 0) | |
=> | |
(set-goal farm-goal 0) | |
) | |
(defrule; esp for 'easiest' difficulty with barely any woodcutters | |
(strategic-number sn-current-age == feudal) | |
(building-type-count-total blacksmith < 1) | |
(wood-amount < 185); 150/160 | |
(or (building-type-count farm >= 4) | |
(idle-farm-count >= 1)); probably not necessary, but meh | |
(up-compare-goal farm-goal != 0) | |
=> | |
(set-goal farm-goal 0) | |
) | |
#load-if-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(game-time < 480) | |
(or (death-match-game) | |
(game-time < 300)) | |
=> | |
(set-goal farm-goal 0) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(or (or (map-type yucatan) | |
(and (building-type-count-total farm > 5) | |
(idle-farm-count > 0))) | |
(and (and (dropsite-min-distance deer-hunting > 15); deer found but not very close => save for hunting mill | |
(dropsite-min-distance deer-hunting < 32)) | |
(unit-type-count-total villager > 22))) | |
(wood-amount < 120); sometimes there was still no hunting | |
=> | |
(set-goal farm-goal 0) | |
) | |
(defrule | |
(or (and (strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(and (current-age == dark-age) | |
(wood-amount < 210))); place farms only if still enough wood left for dock | |
(wood-amount < farm-wood)) | |
(goal farm-goal 1) | |
=> | |
(set-goal farm-goal 0) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(strategic-number sn-current-age == dark) | |
(wood-amount >= 250); high wood because dock was delayed for long | |
(goal farm-goal 1) | |
=> | |
(set-goal farm-goal 2); allow placing many farms, probably failed dock placement | |
) | |
(defrule | |
(strategic-number sn-current-age == df-transit) | |
(unit-type-count villager >= 30) | |
(unit-type-count villager > dark-age-villager) | |
(building-type-count-total farm < 12) | |
(or (building-type-count-total barracks > 0) | |
(civ-selected saracen)) | |
(or (wood-amount >= 385); feudal buildings + farm | |
(food-amount < 400)) | |
(or (goal strategy-goal rush) | |
(goal strategy-goal boom)) | |
(idle-farm-count < 1) | |
(food-amount < 600) | |
=> | |
(set-goal farm-goal 1) | |
) | |
(defrule | |
(goal farm-goal 1) | |
(idle-farm-count > 2) | |
=> | |
(set-goal farm-goal 0) | |
) | |
(defrule | |
(goal farm-goal 1) | |
(or (and (building-type-count-total monastery > 0) | |
(building-type-count-total town-center >= tc-level-three)) | |
(and (wood-amount > 120) | |
(and (building-type-count-total stable > 1) | |
(or (goal control-goal aggressive-rush) | |
(building-type-count town-center >= tc-level-two))))) | |
=> | |
(set-goal farm-goal 2) | |
) | |
(defrule | |
(or (strategic-number sn-current-age == dark) | |
(and (and (strategic-number sn-current-age == df-transit) | |
(wood-amount >= 435)); feudal buildings + (wheelbarrow) + farm | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed))) | |
(wood-amount >= 130) | |
(or (and (unit-type-count villager > 20) | |
(building-type-count-total lumber-camp > 1)) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed)); fix if no docks could be placed | |
(can-build farm) | |
(goal farm-goal 1) | |
=> | |
(set-goal farm-goal 2) | |
) | |
(defrule | |
(wood-amount > 200) | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal flush) | |
(current-age-time > 180); don't spend all wood into farms at the start of the age | |
(can-build farm) | |
(goal farm-goal 1) | |
=> | |
(set-goal farm-goal 2) | |
) | |
#load-if-not-defined WONDER-RACE | |
#load-if-not-defined POPULATION-CAP-25 | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed) | |
(players-unit-type-count every-enemy longboat-line == 0) | |
(players-unit-type-count every-enemy galley-line == 0) | |
(players-unit-type-count every-enemy fire-ship-line == 0) | |
(building-type-count-total dock > 0) | |
=> | |
(up-jump-rule 5) | |
) | |
(defrule | |
(goal position-goal flank) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count barracks < 3) | |
(building-type-count archery-range < 1) | |
(building-type-count stable < 1) | |
(building-type-count castle < 1) | |
(building-type-count siege-workshop < 2) | |
(building-type-count monastery < 2) | |
(wood-amount < 250) | |
(players-building-type-count target-player dock < 3) | |
(strategic-number sn-current-age < ci-transit) | |
(building-type-count-total dock >= 1); ! | |
=> | |
(up-jump-rule 4)) | |
(defrule | |
(goal save-wood-goal 0) | |
(goal enemy-boats-goal 1) | |
(building-type-count-total blacksmith > 0) | |
(building-type-count-total dock < 5) | |
(or (stone-amount < 200) | |
(building-type-count-total dock < 1)) | |
(or (building-type-count-total dock < 2) | |
(civilian-population > 60)) | |
(or (building-type-count-total dock < 4) | |
(civilian-population > 80)) | |
(can-build dock) | |
=> | |
(build dock) | |
) | |
(defrule | |
(goal save-wood-goal 0) | |
(strategic-number sn-current-age == dark) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(building-type-count-total lumber-camp > 0); fish boom instead of farming is better with UP | |
(building-type-count-total mill > 0) | |
(building-type-count-total dock < 2) | |
(or (building-type-count-total dock < 1) | |
(and (unit-type-count-total villager > 28); high villager => low food | |
(food-amount < 400))); probably stupid stuff happened like fishing ship going to the exact opposite side to fish (rarely) | |
(can-build dock) | |
=> | |
(build dock) | |
) | |
(defrule | |
(strategic-number sn-current-age < fc-transit) | |
(strategic-number sn-current-age >= df-transit) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(goal save-wood-goal 0) | |
(goal enemy-boats-goal 1) | |
(wood-amount > 400) | |
(food-amount < 550); less food to even place a blacksmith, mainly on poor maps with bugged fishing near mill. | |
(can-build dock) | |
(building-type-count-total dock < 2) | |
=> | |
(build dock) | |
) | |
(defrule | |
(strategic-number sn-current-age >= df-transit) | |
(or (strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(or (players-unit-type-count any-enemy galley-line > 0) | |
(players-unit-type-count any-enemy fire-ship-line > 0))) | |
(goal save-wood-goal 0) | |
(building-type-count-total dock < 3) | |
(or (goal strategy-goal flush) | |
(building-type-count-total blacksmith > 0)) | |
(can-build dock) | |
=> | |
(build dock) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(or (building-type-count-total blacksmith > 0) | |
(starting-age == post-imperial-age)) | |
(building-type-count-total dock < 9) | |
(or (building-type-count-total dock < 3) | |
(building-type-count-total town-center >= tc-level-two)) | |
(or (building-type-count-total dock < 4) | |
(or (civilian-population > 80) | |
(death-match-game))) | |
(can-build dock) | |
=> | |
(build dock) | |
) | |
(defrule | |
(or (and (goal control-goal aggressive-rush) | |
(goal unit-goal knight)) | |
(goal unit-goal skirmisher)) | |
=> | |
(up-jump-rule 1) | |
) | |
(defrule | |
(current-age-time < 300) | |
(current-age == castle-age) | |
(building-type-count monastery == 1) | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count-total monk == 0) | |
(unit-type-count-total 134 == 0); dead monk | |
(unit-type-count-total 286 == 0); monk with relic | |
(building-type-count-total market == 0) | |
(cc-players-unit-type-count 0 relic > 0) | |
(gold-amount < 100) | |
=> | |
(set-strategic-number sn-resource-control monk) | |
;debug (chat-to-player my-player-number "Saving resources for monk") | |
) | |
(defrule | |
(current-age-time < 300) | |
(building-type-count monastery == 1) | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count-total monk == 0) | |
(unit-type-count-total 134 == 0); dead monk | |
(goal control-goal aggressive-rush) | |
(goal unit-goal knight) | |
(or | |
(strategic-number sn-cavalry-threat > 0); still get a monk if enemy is krushing, as they're good vs cavalry | |
(goal enemy-goal skirmisher); enemy spam trash so it's not likely we're going to attack quick | |
) | |
(cc-players-unit-type-count 0 relic > 0) | |
(gold-amount < 100) | |
=> | |
(set-strategic-number sn-resource-control monk) | |
;debug (chat-to-player my-player-number "Saving resources for monk") | |
) | |
(defrule | |
(strategic-number sn-resource-control == monk) | |
(or | |
(and | |
(unit-type-count female-gold-miner == 0) | |
(unit-type-count male-gold-miner == 0) | |
) | |
(and | |
(or | |
(town-under-attack) | |
(strategic-number sn-military-level < 0) | |
) | |
(strategic-number sn-military-level < 1) | |
) | |
) | |
=> | |
(set-strategic-number sn-resource-control 0) | |
) | |
(defrule | |
(current-age >= feudal-age); test | |
(strategic-number sn-camp-max-distance < 30) | |
=> | |
(set-strategic-number sn-camp-max-distance 30)) | |
(defrule | |
(or (game-time > 1640) | |
(building-type-count-total town-center >= 3)) | |
(or (game-time > 1200) | |
(and (goal under-attack-goal 0) | |
(strategic-number sn-military-level >= 1))) | |
(strategic-number sn-camp-max-distance < 40) | |
=> | |
(set-strategic-number sn-camp-max-distance 40)) | |
(defrule | |
(or (game-time > 3000) | |
(and (game-time > 2100) | |
(strategic-number sn-military-level >= 2))) | |
(strategic-number sn-military-level >= 0) | |
(strategic-number sn-camp-max-distance < 70) | |
=> | |
(set-strategic-number sn-camp-max-distance 70)) | |
(defrule | |
(game-time > 3150) | |
(or (game-time > 7800) | |
(or (strategic-number sn-military-level >= 2) | |
(up-compare-goal attack-goal >= 1))) | |
(or (population >= del-civ-pop) | |
(strategic-number sn-current-age >= imperial)) | |
(strategic-number sn-camp-max-distance < 100) | |
=> | |
(set-strategic-number sn-camp-max-distance 100)) | |
(defrule | |
(game-time > 3600) | |
(or (game-time > 12600) | |
(or (strategic-number sn-military-level >= 3) | |
(up-compare-goal attack-goal >= 1))) | |
(population >= del-civ-pop) | |
(strategic-number sn-camp-max-distance < 255) | |
=> | |
(set-strategic-number sn-camp-max-distance 255)) | |
(defrule | |
(game-time > 7200) | |
(or (game-time > 18000) | |
(or (strategic-number sn-military-level >= 3) | |
(up-compare-goal attack-goal >= 1))) | |
(population >= del-civ-pop) | |
(strategic-number sn-camp-max-distance < 480) | |
=> | |
(set-strategic-number sn-camp-max-distance 480)) | |
(defrule | |
(or (game-time > 1320) | |
(and (game-time > 1050) | |
(strategic-number sn-military-level >= 1))) | |
(or (strategic-number sn-maximum-wood-drop-distance < 22) | |
(strategic-number sn-maximum-food-drop-distance < 22)) | |
=> | |
;extend walking distances | |
(set-strategic-number sn-maximum-wood-drop-distance 22) | |
(set-strategic-number sn-maximum-food-drop-distance 22) | |
(set-strategic-number sn-maximum-hunt-drop-distance 24) | |
(set-strategic-number sn-maximum-gold-drop-distance 10) | |
(set-strategic-number sn-maximum-stone-drop-distance 14)) | |
(defrule | |
(or (game-time > 3000) | |
(and (game-time > 2400) | |
(strategic-number sn-military-level >= 1))) | |
(or (strategic-number sn-maximum-wood-drop-distance < 25) | |
(strategic-number sn-maximum-food-drop-distance < 25)) | |
=> | |
(set-strategic-number sn-maximum-wood-drop-distance 25) | |
(set-strategic-number sn-maximum-food-drop-distance 25) | |
(set-strategic-number sn-maximum-hunt-drop-distance 25) | |
(set-strategic-number sn-maximum-gold-drop-distance 11) | |
(set-strategic-number sn-maximum-stone-drop-distance 15)) | |
(defrule | |
(or (game-time > 3900) | |
(and (game-time > 3300) | |
(strategic-number sn-military-level >= 1))) | |
(or (strategic-number sn-maximum-wood-drop-distance < 30) | |
(strategic-number sn-maximum-food-drop-distance < 30)) | |
=> | |
(set-strategic-number sn-maximum-wood-drop-distance 30) | |
(set-strategic-number sn-maximum-food-drop-distance 30) | |
(set-strategic-number sn-maximum-hunt-drop-distance 26) | |
(set-strategic-number sn-maximum-gold-drop-distance 13) | |
(set-strategic-number sn-maximum-stone-drop-distance 16)) | |
(defrule | |
(or (game-time > 5100) | |
(and (game-time > 4500) | |
(strategic-number sn-military-level >= 2))) | |
(or (strategic-number sn-maximum-wood-drop-distance < 35) | |
(strategic-number sn-maximum-food-drop-distance < 35)) | |
=> | |
(set-strategic-number sn-maximum-wood-drop-distance 35) | |
(set-strategic-number sn-maximum-food-drop-distance 35) | |
(set-strategic-number sn-maximum-hunt-drop-distance 27) | |
(set-strategic-number sn-maximum-gold-drop-distance 16) | |
(set-strategic-number sn-maximum-stone-drop-distance 18)) | |
(defrule | |
(or (game-time > 7800) | |
(and (game-time > 7200) | |
(strategic-number sn-military-level >= 2))) | |
(or (strategic-number sn-maximum-wood-drop-distance < 40) | |
(strategic-number sn-maximum-food-drop-distance < 40)) | |
=> | |
(set-strategic-number sn-maximum-wood-drop-distance 40) | |
(set-strategic-number sn-maximum-food-drop-distance 40) | |
(set-strategic-number sn-maximum-hunt-drop-distance 28) | |
(set-strategic-number sn-maximum-gold-drop-distance 18) | |
(set-strategic-number sn-maximum-stone-drop-distance 19)) | |
(defrule | |
(or (game-time > 10200) | |
(and (game-time > 9600) | |
(strategic-number sn-military-level >= 2))) | |
(or (strategic-number sn-maximum-wood-drop-distance < 60) | |
(strategic-number sn-maximum-food-drop-distance < 50)) | |
=> | |
(set-strategic-number sn-maximum-wood-drop-distance 60) | |
(set-strategic-number sn-maximum-food-drop-distance 50) | |
(set-strategic-number sn-maximum-hunt-drop-distance 30) | |
(set-strategic-number sn-maximum-gold-drop-distance 22) | |
(set-strategic-number sn-maximum-stone-drop-distance 22)) | |
(defrule | |
(or (game-time > 12600) | |
(and (game-time > 12000) | |
(strategic-number sn-military-level >= 2))) | |
(or (strategic-number sn-maximum-wood-drop-distance < 255) | |
(strategic-number sn-maximum-food-drop-distance < 60)) | |
=> | |
(set-strategic-number sn-maximum-wood-drop-distance 255) | |
(set-strategic-number sn-maximum-food-drop-distance 60) | |
(set-strategic-number sn-maximum-hunt-drop-distance 60) | |
(set-strategic-number sn-maximum-gold-drop-distance 25) | |
(set-strategic-number sn-maximum-stone-drop-distance 25)) | |
(defrule | |
(or (game-time > 18000) | |
(and (game-time > 14400) | |
(strategic-number sn-military-level >= 3))) | |
(or (strategic-number sn-maximum-wood-drop-distance < 480) | |
(strategic-number sn-maximum-food-drop-distance < 75)) | |
=> | |
(set-strategic-number sn-maximum-wood-drop-distance 480) | |
(set-strategic-number sn-maximum-food-drop-distance 75) | |
(set-strategic-number sn-maximum-hunt-drop-distance 75) | |
(set-strategic-number sn-maximum-gold-drop-distance 40) | |
(set-strategic-number sn-maximum-stone-drop-distance 40)) | |
; ********** RESEARCH ********** | |
(defrule | |
(or | |
(strategic-number sn-resource-control <= 2) | |
(goal train-civ-goal ri-chain-barding) | |
) | |
(or | |
(unit-type-count cavalry-unit-class > mid-min-number-upgrade) | |
(and | |
(or | |
(civ-selected saracen) | |
(goal control-goal shot) | |
) | |
(goal unit-goal knight) | |
) | |
) | |
(can-research-with-escrow ri-chain-barding) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-chain-barding) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(can-research ri-bow-saw) | |
(goal train-civ-goal 1) | |
(or (goal position-goal pocket) | |
(or (current-age-time > 120) | |
(or (goal unit-goal my-unique-unit-line) | |
(or (goal unit-goal skirmisher) | |
(unit-type-count-total villager >= 55))))) | |
(up-compare-goal strategy-goal != fast-imp) | |
; test (building-type-count-total monastery > 0) | |
=> | |
(research ri-bow-saw) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(can-research ri-bow-saw) | |
(goal train-civ-goal 1) | |
(or (and (goal strategy-goal fast-imp) | |
(or (strategic-number sn-current-age >= ci-transit) | |
(unit-type-count villager > 40))) | |
(goal strategy-goal boom)) | |
=> | |
(research ri-bow-saw) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(goal train-civ-goal 1) | |
(or | |
(or | |
(goal position-goal pocket) | |
(goal strategy-goal boom) | |
) | |
(or | |
(current-age-time > 120) | |
(goal unit-goal my-unique-unit-line) | |
) | |
) | |
(nand | |
(goal unit-goal default-ranged) | |
(research-available ri-bodkin-arrow) | |
) | |
(can-research ri-heavy-plow) | |
=> | |
(research ri-heavy-plow) | |
) | |
(defrule | |
(nand | |
(research-available ri-war-galley) | |
(civ-selected viking) | |
) | |
(warboat-count > 12) | |
(goal enemy-boats-goal 1) | |
(or | |
(strategic-number sn-resource-control < 2) | |
(players-unit-type-count any-enemy galley-line > 0) | |
) | |
(can-research ri-careening) | |
=> | |
(research ri-careening) | |
) | |
(defrule | |
(or | |
(up-research-status c: ri-bow-saw >= research-pending) | |
(or | |
(civ-selected viking) | |
(unit-type-count galley-line > 4) | |
) | |
) | |
(can-research-with-escrow ri-war-galley) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-war-galley) | |
) | |
(defrule | |
(can-research-with-escrow ri-fast-fire-ship) | |
=> | |
(release-escrow wood)(release-escrow gold) | |
(set-escrow-percentage wood 0)(set-escrow-percentage gold 0) | |
(research ri-fast-fire-ship) | |
) | |
(defrule | |
(can-research-with-escrow ri-galleon) | |
=> | |
(release-escrow wood)(release-escrow food) | |
(set-escrow-percentage wood 0)(set-escrow-percentage food 0) | |
(research ri-galleon) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(research-available ri-galleon) | |
(building-type-count dock > 0) | |
=> | |
(set-escrow-percentage wood 20)(set-escrow-percentage food 20) | |
(set-goal escrow-purpose-goal navy) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(research-available ri-fast-fire-ship) | |
(building-type-count dock > 0) | |
=> | |
(set-escrow-percentage wood 20)(set-escrow-percentage gold 20) | |
(set-goal escrow-purpose-goal navy) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 2) | |
(nor | |
(research-available ri-fast-fire-ship) | |
(research-available ri-galleon) | |
) | |
(research-available ri-cannon-galleon) | |
(unit-type-count warship-class > 30) | |
(strategic-number sn-military-level >= 0) | |
(players-unit-type-count every-enemy galley-line < 20) | |
(players-unit-type-count every-enemy fire-ship-line < 20) | |
(players-building-type-count any-enemy castle > 0) | |
(building-type-count dock > 0) | |
=> | |
(set-escrow-percentage wood 20)(set-escrow-percentage food 20) | |
(set-goal escrow-purpose-goal navy) | |
(set-strategic-number sn-resource-control navy) | |
(up-jump-rule 1) | |
) | |
(defrule | |
(goal escrow-purpose-goal navy) | |
(or | |
(nor | |
(research-available ri-fast-fire-ship) | |
(research-available ri-galleon) | |
) | |
(building-type-count dock == 0) | |
) | |
=> | |
(set-goal escrow-purpose-goal 0) | |
(release-escrow wood)(release-escrow food)(release-escrow gold) | |
(set-escrow-percentage wood 0)(set-escrow-percentage food 0)(set-escrow-percentage gold 0) | |
) | |
(defrule | |
(nor | |
(research-available ri-galleon) | |
(research-available ri-fast-fire-ship) | |
) | |
(can-research-with-escrow ri-cannon-galleon) | |
=> | |
(release-escrow food)(release-escrow wood) | |
(research ri-cannon-galleon) | |
) | |
(defrule | |
(nor | |
(research-available ri-galleon) | |
(research-available ri-fast-fire-ship) | |
) | |
(or | |
(can-research-with-escrow ri-shipwright) | |
(or | |
(can-research-with-escrow ri-dry-dock) | |
(can-research-with-escrow ri-deck-guns) | |
) | |
) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-shipwright) | |
(research ri-dry-dock) | |
(research ri-deck-guns) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 1) | |
(building-type-count-total town-center > 0) | |
(or | |
(goal strategy-goal sling) | |
(or | |
(strategic-number sn-current-age >= fc-transit) | |
(goal strategy-goal flush) | |
) | |
) | |
(nand | |
(goal unit-goal my-unique-unit-line) | |
(research-available ri-stone-mining) | |
) | |
(can-research ri-double-bit-axe) | |
=> | |
(research ri-double-bit-axe) | |
) | |
#load-if-not-defined SARACEN-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 1) | |
(building-type-count-total town-center > 0) | |
(strategic-number sn-current-age >= fc-transit) | |
(nand (goal unit-goal my-unique-unit-line) | |
(research-available ri-stone-mining)) | |
(or (strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(up-research-status c: ri-bow-saw >= research-pending)) | |
(can-research ri-horse-collar) | |
=> | |
(research ri-horse-collar) | |
) | |
#else | |
(defrule | |
(strategic-number sn-resource-control <= 1) | |
(strategic-number sn-current-age >= fc-transit) | |
(or | |
(or | |
(commodity-selling-price stone < 100) | |
(commodity-buying-price food > 130) | |
) | |
(or | |
(dropsite-min-distance stone > 5) | |
(or | |
(strategic-number sn-stone-gatherer-percentage == 0) | |
(goal strategy-goal boom) | |
) | |
) | |
) | |
(or | |
(building-type-count-total barracks > 0) | |
(goal unit-goal my-unique-unit-line) | |
) | |
(can-research ri-horse-collar) | |
=> | |
(research ri-horse-collar) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control <= 1) | |
(building-type-count-total town-center > 0) | |
(or | |
(and | |
(goal strategy-goal flush) | |
(or | |
(not (research-available ri-man-at-arms)) | |
(or | |
(building-type-count-total archery-range > 1) | |
(building-type-count-total stable > 0) | |
) | |
) | |
) | |
(goal strategy-goal sling) | |
) | |
(can-research ri-horse-collar) | |
=> | |
(research ri-horse-collar) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(civilian-population >= 42) | |
(or | |
(and | |
(goal strategy-goal flush) | |
(or | |
(and | |
(food-amount > 600) | |
(gold-amount < 75) | |
) | |
(goal unit-goal archer) | |
) | |
) | |
(goal strategy-goal sling) | |
) | |
(can-research ri-gold-mining) | |
=> | |
(research ri-gold-mining) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(or | |
(strategic-number sn-gold-gatherer-percentage >= 20) | |
(or | |
(and | |
(goal unit-goal knight) | |
(up-compare-goal position-goal == flank) | |
) | |
(goal unit-goal monk) | |
) | |
) | |
(civilian-population >= 50) | |
) | |
(strategic-number sn-current-age >= fc-transit) | |
(can-research ri-gold-mining) | |
=> | |
(research ri-gold-mining) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(or | |
(or | |
(unit-type-count cavalry-unit-class > low-min-number-upgrade) | |
(unit-type-count cavalry-archer-class > low-min-number-upgrade) | |
) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(or | |
(unit-type-count scout-cavalry > mid-min-number-upgrade);scouts do not count as cavalry-unit-class(!) | |
(unit-type-count conquistador-line > mid-min-number-upgrade) | |
) | |
) | |
(can-research ri-bloodlines) | |
=> | |
(research ri-bloodlines) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-current-age >= fc-transit) | |
(or | |
(goal unit-goal knight) | |
(goal unit-goal cavalry-archer) | |
) | |
(up-compare-goal strategy-goal != boom) | |
(can-research ri-bloodlines) | |
=> | |
(research ri-bloodlines) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(unit-type-count infantry-class > mid-min-number-upgrade) | |
(and | |
(goal unit-goal eagle-warrior) | |
(building-type-count-total barracks > 0); don't research too early on islands | |
) | |
) | |
(or | |
(and | |
(strategic-number sn-current-age >= fc-transit) | |
(up-research-status c: ri-gold-mining >= research-pending) | |
) | |
(or | |
(goal hostilities-goal 1) | |
(death-match-game) | |
) | |
) | |
(can-research ri-scale-mail) | |
=> | |
(research ri-scale-mail) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(or | |
(unit-type-count cavalry-unit-class > low-min-number-upgrade) | |
(unit-type-count scout-cavalry > mid-min-number-upgrade) | |
) | |
(and | |
(building-type-count-total stable > 1) | |
(food-amount > 300) | |
) | |
) | |
(strategic-number sn-current-age >= fc-transit) | |
(can-research ri-scale-barding) | |
=> | |
(research ri-scale-barding) | |
) | |
(defrule | |
(or | |
(and | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(or | |
(and | |
(building-type-count-total siege-workshop > 0) | |
(nand | |
(goal enemy-goal eagle-warrior) | |
(strategic-number sn-archer-threat == 0) | |
) | |
) | |
(strategic-number sn-archer-threat >= 1) | |
) | |
(unit-type-count-total skirmisher-line > mid-min-number-upgrade) | |
) | |
) | |
(strategic-number sn-resource-control == ri-elite-skirmisher) | |
) | |
(can-research ri-elite-skirmisher) | |
=> | |
(research ri-elite-skirmisher) | |
) | |
(defrule | |
(or | |
(or | |
(unit-type-count eagle-warrior-line > 11) | |
(and | |
(not (civ-selected aztec)) | |
(current-age-time >= 300) | |
) | |
) | |
(goal unit-goal eagle-warrior) | |
) | |
(can-research-with-escrow ri-elite-eagle-warrior) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(set-escrow-percentage food 0)(set-escrow-percentage gold 0) | |
(research ri-elite-eagle-warrior) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(unit-type-count monk > 4) | |
(and | |
(goal enemy-goal flush) | |
(goal ranged-unit-type-goal monk) | |
) | |
) | |
=> | |
(research ri-sanctity) | |
(research ri-theocracy) | |
(research ri-illumination) | |
(research ri-block-printing) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(up-research-status c: ri-sanctity >= research-pending) | |
(unit-type-count monk > 4) | |
(or | |
(civ-selected aztec); bugged, movement speed bonus only counts for monks with relics in 1.0c | |
(goal aofe-game-goal 1); bug is fixed in AoFE | |
) | |
(can-research ri-fervor) | |
=> | |
(research ri-fervor) | |
) | |
#load-if-defined AZTEC-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(up-research-status c: ri-sanctity >= research-pending) | |
(unit-type-count monk > 4) | |
(can-research ri-fervor) | |
=> | |
(research ri-fervor) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(building-type-count-total monastery > 2) | |
(unit-type-count monk > 19) | |
(current-age == imperial-age) | |
(population >= max-pop) | |
(can-research ri-herbal-medicine) | |
=> | |
(research ri-herbal-medicine) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal ranged-unit-type-goal monk); redemption will lure monks into death so avoid it unless enemy tries to counter monks with siege | |
(or | |
(players-unit-type-count any-enemy scorpion-line > 2) | |
(or | |
(players-unit-type-count any-enemy bombard-cannon > 0) | |
(players-unit-type-count any-enemy mangonel-line > 0) | |
) | |
) | |
(can-research ri-redemption) | |
=> | |
(research ri-redemption) | |
) | |
(defrule | |
(or | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-resource-control == ri-heresy) | |
) | |
(or | |
(and | |
(and | |
(unit-type-count monk > 12) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(unit-type-count monk > 5) | |
) | |
(and | |
(players-unit-type-count any-enemy monk > 3) | |
(goal ranged-unit-type-goal monk) | |
) | |
) | |
(can-research ri-atonement) | |
=> | |
(research ri-atonement) | |
) | |
#load-if-defined CELTIC-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(can-research-with-escrow ri-heavy-scorpion) | |
(can-research-with-escrow my-unique-research) | |
) | |
=> | |
(release-escrow wood)(release-escrow food)(release-escrow gold) | |
(research ri-heavy-scorpion) | |
(research my-unique-research) | |
) | |
#else | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(unit-type-count scorpion-line > low-min-number-upgrade) | |
(goal ranged-unit-type-goal scorpion) | |
) | |
(can-research ri-heavy-scorpion) | |
=> | |
(research ri-heavy-scorpion) | |
) | |
(defrule | |
(or | |
(civ-selected japanese) | |
(civ-selected viking) | |
) | |
(strategic-number sn-resource-control < 1) | |
(players-unit-type-count focus-player skirmisher-line > 20) | |
(unit-type-count trade-cart > 5) | |
(can-research ri-heavy-scorpion) | |
=> | |
(research ri-heavy-scorpion) | |
) | |
#end-if | |
(defrule | |
(or | |
(unit-type-count-total my-unique-unit-line >= high-min-number-upgrade) | |
(goal uu-up-goal 1) | |
) | |
(can-research-with-escrow my-unique-unit-upgrade) | |
=> | |
(release-escrow wood)(release-escrow food)(release-escrow gold) | |
(research my-unique-unit-upgrade) | |
(set-goal uu-up-goal 0) | |
) | |
(defrule | |
(current-age-time > 300) | |
(game-time > 1800); not in DM | |
(gold-amount > 2000) | |
(or (or (civ-selected saracen)(civ-selected turkish))(civ-selected japanese)) | |
(can-research-with-escrow my-unique-unit-upgrade) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research my-unique-unit-upgrade) | |
(set-goal uu-up-goal 0) | |
) | |
(defrule | |
(population >= del-civ-pop) | |
(current-age-time > 300) | |
(or (gold-amount > 2000) | |
(or (unit-type-count-total my-unique-unit-line >= 10) | |
(and (civ-selected saracen) | |
(unit-type-count-total camel-line >= 10)))) | |
(or (civ-selected saracen) | |
(civ-selected byzantine)) | |
(can-research-with-escrow my-unique-research) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research my-unique-research) | |
) | |
#load-if-defined TURKISH-CIV | |
(defrule | |
(population >= del-civ-pop) | |
(unit-type-count bombard-tower > 4) | |
(can-research-with-escrow my-unique-research) | |
=> | |
(release-escrow gold)(release-escrow stone) | |
(research my-unique-research) | |
) | |
#end-if | |
#load-if-defined GOTHIC-CIV | |
(defrule | |
(strategic-number sn-resource-control != ri-long-swordsman) | |
(goal unit-goal knight) | |
(building-type-count town-center < tc-level-three) | |
(unit-type-count-total militiaman-line < 6); test | |
(goal control-goal militiaman-line) | |
=> | |
(up-jump-rule 4) | |
) | |
#end-if | |
(defrule | |
(or (strategic-number sn-resource-control <= 2) | |
(strategic-number sn-resource-control == ri-long-swordsman)) | |
(or (unit-type-count-total militiaman-line >= 6) | |
(or (goal unit-goal militiaman-line) | |
(goal control-goal militiaman-line))) | |
(or (unit-type-count-total militiaman-line >= 6) | |
(or (goal strategy-goal flush) | |
(strategic-number sn-current-age >= fc-transit))) | |
(can-research ri-man-at-arms) | |
=> | |
(research ri-man-at-arms) | |
) | |
(defrule | |
(or (strategic-number sn-resource-control <= 2) | |
(strategic-number sn-resource-control == ri-long-swordsman)) | |
(or (unit-type-count-total militiaman-line >= 6) | |
(or (goal unit-goal militiaman-line) | |
(goal control-goal militiaman-line))) | |
(can-research ri-long-swordsman) | |
=> | |
(research ri-long-swordsman) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (unit-type-count-total militiaman-line >= 6) | |
(or (goal unit-goal militiaman-line) | |
(goal control-goal militiaman-line))) | |
(can-research ri-two-handed-swordsman) | |
=> | |
(research ri-two-handed-swordsman) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (unit-type-count-total militiaman-line >= 6) | |
(or (goal unit-goal militiaman-line) | |
(goal control-goal militiaman-line))) | |
(can-research ri-champion) | |
=> | |
(research ri-champion) | |
) | |
(defrule | |
(or (and (strategic-number sn-resource-control <= 2) | |
(or (goal strategy-goal flush) | |
(current-age-time > 240))) | |
(strategic-number sn-resource-control == ri-crossbow)) | |
(or (goal ranged-unit-type-goal archer) | |
(or (strategic-number sn-resource-control == ri-crossbow) | |
(and (unit-type-count archer > 8) | |
(goal hostilities-goal 1)))) | |
(can-research ri-crossbow) | |
=> | |
(research ri-crossbow) | |
) | |
(defrule | |
(or | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-resource-control == ri-arbalest) | |
) | |
(or | |
(goal ranged-unit-type-goal archer) | |
(and | |
(unit-type-count archer-line > 10) | |
(goal hostilities-goal 1) | |
) | |
) | |
(can-research ri-arbalest) | |
=> | |
(research ri-arbalest) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count knight-line > 12) | |
(can-research ri-cavalier) | |
=> | |
(research ri-cavalier) | |
) | |
(defrule | |
(or (or (civ-selected slavic); get more uu instead | |
(civ-selected mongol)) | |
(civ-selected persian)) | |
(up-compare-goal unit-goal != knight) | |
=> | |
(up-jump-rule 1) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (goal anti-cavalry-threat-goal 0) | |
(goal unit-goal knight)) | |
(or (up-research-status c: ri-bloodlines >= research-pending) | |
(civ-selected frankish)) | |
(can-research ri-cavalier) | |
=> | |
(research ri-cavalier) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (up-research-status c: ri-bloodlines >= research-pending) | |
(civ-selected frankish)) | |
(can-research-with-escrow ri-paladin) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-paladin) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (unit-type-count ranged-unit-class > mid-min-number-upgrade) | |
(unit-type-count cavalry-archer-class > mid-min-number-upgrade)) | |
(or (or (gold-amount < 200) | |
(strategic-number sn-current-age >= ci-transit)) | |
(goal hostilities-goal 1)) | |
(can-research-with-escrow ri-thumb-ring) | |
=> | |
(release-escrow wood)(release-escrow food) | |
(research ri-thumb-ring) | |
) | |
#load-if-not-defined GOTHIC-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (up-research-status c: ri-bloodlines >= research-pending) | |
(research-available ri-bloodlines)) | |
(or (unit-type-count villager >= 40); dont research this at castle age start when rushing | |
(population >= del-civ-pop)) | |
(or (and (food-amount > 350) | |
(or (gold-amount < 200) | |
(strategic-number sn-current-age >= ci-transit))) | |
(unit-type-count scout-cavalry > 6)) | |
(can-research ri-light-cavalry) | |
=> | |
(research ri-light-cavalry) | |
) | |
(defrule | |
(or (goal monk-threat-goal 1) | |
(and (strategic-number sn-resource-control <= 2) | |
(and (and (food-amount > 400) | |
(gold-amount < 100)) | |
(or (civ-selected frankish) | |
(civ-selected briton))))) | |
(can-research ri-light-cavalry) | |
=> | |
(research ri-light-cavalry) | |
) | |
(defrule | |
(game-time < 1500) | |
(or (players-building-type-count every-enemy monastery > 1) | |
(and (players-building-type-count every-enemy castle > 0) | |
(players-unit-type-count every-enemy monk > 3))) | |
(can-research ri-light-cavalry) | |
=> | |
(research ri-light-cavalry) | |
) | |
#end-if | |
(defrule | |
(nand (civ-selected magyar) | |
(goal monk-threat-goal 0)); get UU instead | |
(strategic-number sn-resource-control <= 2) | |
(can-research ri-hussar) | |
=> | |
(research ri-hussar) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (unit-type-count cavalry-archer-line >= high-min-number-upgrade) | |
(or (goal unit-goal cavalry-archer) | |
(and (civ-selected hun) | |
(unit-type-count trade-cart > 5)))) | |
(unit-type-count cavalry-archer-line >= mid-min-number-upgrade) | |
(can-research ri-heavy-cavalry-archer) | |
=> | |
(research ri-heavy-cavalry-archer) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(or | |
(up-research-status c: ri-crossbow >= research-pending) | |
(unit-type-count cavalry-archer-class > mid-min-number-upgrade) | |
) | |
(or | |
(or | |
(unit-type-count ranged-unit-class > mid-min-number-upgrade) | |
(goal strategy-goal flush) | |
) | |
(or | |
(unit-type-count galley-line > 4) | |
(up-research-status c: ri-chemistry >= research-pending) | |
) | |
) | |
) | |
(can-research ri-fletching) | |
=> | |
(research ri-fletching) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-resource-control == ri-fletching) | |
) | |
(strategic-number sn-current-age >= fc-transit) | |
(or | |
(or | |
(goal unit-goal cavalry-archer) | |
(goal unit-goal archer) | |
) | |
(goal unit-goal skirmisher) | |
) | |
(can-research ri-fletching) | |
=> | |
(research ri-fletching) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-resource-control == ri-fletching) | |
) | |
(current-age >= castle-age) | |
(building-type-count castle > 0) | |
(or | |
(unit-type-count ranged-unit-class > 0) | |
(unit-type-count cavalry-archer-class > 0) | |
) | |
(can-research ri-fletching) | |
=> | |
(research ri-fletching) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(or | |
(unit-type-count ranged-unit-class > mid-min-number-upgrade) | |
(unit-type-count cavalry-archer-class > mid-min-number-upgrade) | |
) | |
(or | |
(unit-type-count galley-line > 0) | |
(and | |
(goal unit-goal skirmisher) | |
(current-age-time > 60) | |
) | |
) | |
) | |
(can-research ri-bodkin-arrow) | |
=> | |
(research ri-bodkin-arrow) | |
) | |
(defrule | |
(or | |
(and | |
(goal strategy-goal rush) | |
(or | |
(goal unit-goal cavalry-archer) | |
(goal unit-goal archer) | |
) | |
) | |
(or | |
(and | |
(building-type-count castle > 1) | |
(population >= max-civ-pop) | |
) | |
(strategic-number sn-resource-control == ri-bodkin-arrow) | |
) | |
) | |
(can-research ri-bodkin-arrow) | |
=> | |
(research ri-bodkin-arrow) | |
) | |
(defrule | |
(or | |
(and | |
(unit-type-count infantry-class > mid-min-number-upgrade) | |
(strategic-number sn-resource-control <= 2) | |
) | |
(goal train-civ-goal ri-chain-mail) | |
) | |
(can-research-with-escrow ri-chain-mail) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-chain-mail) | |
) | |
#load-if-not-defined DIFFICULTY-EASIEST; test | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(current-age-time > 60) | |
(can-research ri-conscription) | |
=> | |
(research ri-conscription) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(population > sixty-percent-pop) | |
(unit-type-count cavalry-unit-class > high-min-number-upgrade) | |
(research-available ri-plate-barding) | |
=> | |
(set-escrow-percentage food 20)(set-escrow-percentage gold 20) | |
(set-goal escrow-purpose-goal blacksmith) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count cavalry-unit-class > mid-min-number-upgrade) | |
(can-research-with-escrow ri-plate-barding) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(set-escrow-percentage food 0)(set-escrow-percentage gold 0) | |
(set-goal escrow-purpose-goal 0) | |
(research ri-plate-barding) | |
) | |
#load-if-not-defined DIFFICULTY-EASY | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(population > sixty-percent-pop) | |
(not (can-research-with-escrow ri-bracer)) | |
(research-available ri-bracer) | |
=> | |
(set-escrow-percentage food 20)(set-escrow-percentage gold 20) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(can-research-with-escrow ri-bracer) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(set-escrow-percentage food 0)(set-escrow-percentage gold 0) | |
(research ri-bracer) | |
) | |
#end-if; test | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(unit-type-count infantry-class < low-min-number-upgrade) | |
(up-research-status c: ri-scale-mail >= research-pending) | |
) | |
(up-research-status c: ri-scale-barding >= research-pending) | |
(unit-type-count cavalry-unit-class > low-min-number-upgrade) | |
(strategic-number sn-current-age >= fc-transit) | |
(can-research ri-forging) | |
=> | |
(research ri-forging) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(nand | |
(goal unit-goal eagle-warrior) | |
(research-available ri-chain-mail) | |
) | |
(or | |
(unit-type-count cavalry-unit-class < low-min-number-upgrade) | |
(up-research-status c: ri-scale-barding >= research-pending) | |
) | |
(unit-type-count infantry-class > low-min-number-upgrade) | |
(up-research-status c: ri-scale-mail >= research-pending) | |
(nand | |
(goal strategy-goal boom) | |
(goal hostilities-goal 0) | |
) | |
(strategic-number sn-current-age >= fc-transit) | |
(can-research ri-forging) | |
=> | |
(research ri-forging) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 0) | |
(or | |
(up-research-status c: ri-chain-barding >= research-pending) | |
(up-research-status c: ri-chain-mail >= research-pending) | |
) | |
(or | |
(or | |
(strategic-number sn-current-age >= ci-transit) | |
(goal hostilities-goal 1) | |
) | |
(and | |
(goal unit-goal eagle-warrior) | |
(up-compare-goal strategy-goal != fast-imp) | |
) | |
) | |
(can-research-with-escrow ri-iron-casting) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-iron-casting) | |
) | |
#load-if-not-defined DIFFICULTY-EASIEST; test | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(population > sixty-percent-pop) | |
(or | |
(unit-type-count infantry-class > high-min-number-upgrade) | |
(unit-type-count cavalry-unit-class > high-min-number-upgrade) | |
) | |
(not (can-research-with-escrow ri-blast-furnace)) | |
(research-available ri-blast-furnace) | |
=> | |
(set-escrow-percentage food 20)(set-escrow-percentage gold 20) | |
(set-goal escrow-purpose-goal blacksmith) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(nand | |
(research-available ri-plate-mail) | |
(unit-type-count infantry-class > high-min-number-upgrade) | |
) | |
(nand | |
(research-available ri-plate-barding) | |
(unit-type-count cavalry-unit-class > high-min-number-upgrade) | |
) | |
(can-research-with-escrow ri-blast-furnace) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(set-escrow-percentage food 0)(set-escrow-percentage gold 0) | |
(research ri-blast-furnace) | |
(set-goal escrow-purpose-goal 0) | |
) | |
#end-if; test | |
(defrule | |
(goal unit-goal knight) | |
(unit-type-count knight-line > 12) | |
(game-time < 2700) | |
(not (up-research-status c: ri-paladin >= research-pending)) | |
=> | |
(up-jump-rule 2) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(population > sixty-percent-pop) | |
(building-type-count university > 0) | |
(not (can-research-with-escrow ri-chemistry)) | |
(research-available ri-chemistry) | |
=> | |
(set-escrow-percentage food 20)(set-escrow-percentage gold 20) | |
) | |
(defrule | |
(or | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-resource-control == ri-chemistry) | |
) | |
(or | |
(current-age-time > 120) | |
(or | |
(goal unit-goal gunpowder-class) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
) | |
) | |
(can-research-with-escrow ri-chemistry) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(set-escrow-percentage food 0)(set-escrow-percentage gold 0) | |
(research ri-chemistry) | |
) | |
#load-if-not-defined PERSIAN-CIV | |
#load-if-not-defined SPANISH-CIV | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (unit-type-count cavalry-archer-line >= high-min-number-upgrade) | |
(or (goal unit-goal cavalry-archer) | |
(and (civ-selected hun) | |
(unit-type-count trade-cart > 5)))) | |
(unit-type-count cavalry-archer-line >= mid-min-number-upgrade) | |
(can-research ri-parthian-tactics) | |
=> | |
(research ri-parthian-tactics) | |
) | |
#end-if | |
#end-if | |
#load-if-not-defined DIFFICULTY-EASIEST; test | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(population > sixty-percent-pop) | |
(unit-type-count infantry-class > high-min-number-upgrade) | |
(research-available ri-plate-mail) | |
=> | |
(set-escrow-percentage food 20)(set-escrow-percentage gold 20) | |
(set-goal escrow-purpose-goal blacksmith) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count infantry-class > mid-min-number-upgrade) | |
(can-research-with-escrow ri-plate-mail) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(set-escrow-percentage food 0)(set-escrow-percentage gold 0) | |
(set-goal escrow-purpose-goal 0) | |
(research ri-plate-mail) | |
) | |
#end-if; test | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(or | |
(unit-type-count gunpowder-class > low-min-number-upgrade) | |
(unit-type-count conquistador-line > low-min-number-upgrade) | |
) | |
(and | |
(up-research-status c: ri-fletching >= research-pending) | |
(or | |
(or | |
(unit-type-count ranged-unit-class > mid-min-number-upgrade) | |
(unit-type-count cavalry-archer-class > mid-min-number-upgrade) | |
) | |
(and | |
(goal hostilities-goal 1) | |
(goal strategy-goal flush) | |
) | |
) | |
) | |
) | |
(can-research ri-padded-archer-armor) | |
=> | |
(research ri-padded-archer-armor) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(unit-type-count ranged-unit-class > low-min-number-upgrade) | |
(unit-type-count cavalry-archer-class > low-min-number-upgrade) | |
) | |
(up-research-status c: ri-bodkin-arrow >= research-pending) | |
(or | |
(strategic-number sn-current-age >= ci-transit) | |
(goal hostilities-goal 1) | |
) | |
(can-research-with-escrow ri-leather-archer-armor) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-leather-archer-armor) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(unit-type-count gunpowder-class > low-min-number-upgrade) | |
(unit-type-count conquistador-line > low-min-number-upgrade) | |
) | |
(or | |
(strategic-number sn-current-age >= ci-transit) | |
(goal hostilities-goal 1) | |
) | |
(can-research-with-escrow ri-leather-archer-armor) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-leather-archer-armor) | |
) | |
#load-if-not-defined DIFFICULTY-EASIEST; test | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(not (research-available ri-bracer)) | |
(or | |
(or | |
(unit-type-count ranged-unit-class > low-min-number-upgrade) | |
(unit-type-count cavalry-archer-class > low-min-number-upgrade) | |
) | |
(or | |
(unit-type-count gunpowder-class > low-min-number-upgrade) | |
(unit-type-count conquistador-line > low-min-number-upgrade) | |
) | |
) | |
(can-research-with-escrow ri-ring-archer-armor) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-ring-archer-armor) | |
) | |
#end-if; test | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(strategic-number sn-current-age >= ci-transit) | |
(and | |
(gold-amount < 200) | |
(or | |
(food-amount > 500) | |
(goal hostilities-goal 1) | |
) | |
) | |
) | |
(unit-type-count infantry-class > mid-min-number-upgrade) | |
(can-research ri-squires) | |
=> | |
(research ri-squires) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(or | |
(gold-amount < 200) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(goal hostilities-goal 1) | |
) | |
(or | |
(unit-type-count cavalry-unit-class > mid-min-number-upgrade) | |
(or | |
(unit-type-count cavalry-archer-class > mid-min-number-upgrade) | |
(unit-type-count conquistador-line > mid-min-number-upgrade) | |
) | |
) | |
(can-research ri-husbandry) | |
=> | |
(research ri-husbandry) | |
) | |
(defrule | |
(or | |
(unit-type-count spearman-line > 7) | |
(strategic-number sn-cavalry-threat >= 1) | |
) | |
(nand | |
(and | |
(goal unit-goal knight) | |
(game-time < 2400) | |
) | |
(or | |
(civ-selected indian) | |
(goal strategy-goal boom) | |
) | |
) | |
(can-research ri-pikeman) | |
=> | |
(research ri-pikeman) | |
) | |
(defrule | |
(unit-type-count spearman-line > high-min-number-upgrade) | |
(research-available ri-halberdier) | |
(not (goal escrow-purpose-goal blacksmith)) | |
=> | |
(set-escrow-percentage gold 67) | |
(set-goal escrow-purpose-goal ri-halberdier) | |
) | |
(defrule | |
(or | |
(and | |
(escrow-amount gold >= 225) | |
(not (goal escrow-purpose-goal ri-halberdier)) | |
) | |
(escrow-amount gold >= 600) | |
) | |
(not (goal escrow-purpose-goal my-unique-unit-line)) | |
(current-age == imperial-age) | |
=> | |
(set-escrow-percentage food 30) | |
(set-escrow-percentage gold 0); stop escrowing gold when we have enough | |
) | |
(defrule | |
(or | |
(unit-type-count spearman-line > mid-min-number-upgrade) | |
(strategic-number sn-minimum-water-body-size-for-dock > water-mixed) | |
) | |
(can-research-with-escrow ri-halberdier) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(set-escrow-percentage food 0)(set-escrow-percentage gold 0) | |
(research ri-halberdier) | |
(set-goal escrow-purpose-goal 0) | |
) | |
(defrule | |
(or | |
(and | |
(unit-type-count spearman-line < 10) | |
(goal escrow-purpose-goal ri-halberdier) | |
) | |
(and | |
(and | |
(unit-type-count infantry-class < 10) | |
(unit-type-count cavalry-unit-class < 10) | |
) | |
(goal escrow-purpose-goal blacksmith) | |
) | |
) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(set-escrow-percentage food 0)(set-escrow-percentage gold 0) | |
(set-goal escrow-purpose-goal 0) | |
) | |
(defrule | |
(up-research-status c: ri-elite-eagle-warrior >= research-pending); try to press advatange with as many EEW as possivle in early imp | |
(current-age-time < 600) | |
(population < del-civ-pop) | |
=> | |
(release-escrow food)(release-escrow wood)(release-escrow gold) | |
(set-escrow-percentage food 0)(set-escrow-percentage wood 0)(set-escrow-percentage gold 0) | |
(set-goal escrow-purpose-goal 0) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(current-age-time > 180) | |
(strategic-number sn-resource-control <= 2) | |
(can-research ri-capped-ram) | |
(unit-type-count-total battering-ram-line > 0) | |
=> | |
(research ri-capped-ram) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(population > max-civ-pop) | |
(strategic-number sn-resource-control <= 1) | |
(can-research ri-siege-ram) | |
(unit-type-count-total battering-ram-line > 3) | |
=> | |
(research ri-siege-ram) | |
) | |
(defrule | |
(goal save-wood-goal 0) | |
(strategic-number sn-resource-control <= 1) | |
(or | |
(strategic-number sn-current-age >= ci-transit) | |
(or | |
(building-type-count-total monastery > 2); mush | |
(and | |
(food-amount > 400) | |
(gold-amount < 200) | |
) | |
) | |
) | |
(can-research ri-gold-shaft-mining) | |
=> | |
(research ri-gold-shaft-mining) | |
) | |
(defrule | |
(or | |
(strategic-number sn-stone-gatherer-percentage > 9) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(strategic-number sn-stone-gatherer-percentage > 3) | |
(strategic-number sn-current-age >= fc-transit) | |
(or | |
(building-type-count-total barracks > 0); for saracens, to finish the barracks first to drop the other military buildings before castle age | |
(or | |
(goal unit-goal my-unique-unit-line) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
) | |
(can-research ri-stone-mining) | |
=> | |
(research ri-stone-mining) | |
) | |
(defrule | |
(or | |
(can-research ri-crop-rotation) | |
(can-research ri-two-man-saw) | |
) | |
=> | |
(research ri-crop-rotation) | |
(research ri-two-man-saw) | |
) | |
#load-if-not-defined DIFFICULTY-EASIEST; test | |
#load-if-not-defined DIFFICULTY-EASY | |
(defrule; back-up blacksmith research rules | |
(strategic-number sn-resource-control != 0) | |
(strategic-number sn-resource-control != 2) | |
(strategic-number sn-number-attack-groups < 2) | |
(nand (strategic-number sn-maximum-town-size >= 40) | |
(enemy-buildings-in-town)) | |
(or (population < del-civ-pop) | |
(and (population < eighty-five-percent-pop) | |
(current-age < imperial-age))) | |
=> | |
(up-jump-rule 2)) | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(or (building-type-count watch-tower >= 3) | |
(or (building-type-count castle >= 3) | |
(or (unit-type-count-total 900 >= high-min-number-upgrade) | |
(or (unit-type-count-total slinger >= high-min-number-upgrade) | |
(unit-type-count-total 936 >= high-min-number-upgrade))))) | |
=> | |
(research ri-fletching) | |
(research ri-bodkin-arrow) | |
(research ri-bracer)) | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(or (unit-type-count-total scout-cavalry >= high-min-number-upgrade) | |
(or (unit-type-count-total 912 >= high-min-number-upgrade) | |
(or (unit-type-count-total magyar-huszar >= high-min-number-upgrade) | |
(unit-type-count-total boyar >= high-min-number-upgrade)))) | |
=> | |
(research ri-scale-barding) | |
(research ri-chain-barding) | |
(research ri-plate-barding)) | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(or (unit-type-count-total 906 >= high-min-number-upgrade) | |
(or (unit-type-count-total kamayuk >= high-min-number-upgrade) | |
(unit-type-count-total condottiero >= high-min-number-upgrade))) | |
=> | |
(research ri-scale-mail) | |
(research ri-chain-mail) | |
(research ri-plate-mail)) | |
(defrule | |
(up-research-status c: ri-bodkin-arrow >= research-pending) | |
(or (unit-type-count-total 900 >= high-min-number-upgrade) | |
(or (unit-type-count-total 936 >= high-min-number-upgrade) | |
(or (unit-type-count-total slinger >= high-min-number-upgrade) | |
(or (unit-type-count-total elephant-archer >= high-min-number-upgrade) | |
(unit-type-count-total genoese-crossbowman >= high-min-number-upgrade))))) | |
=> | |
(research ri-padded-archer-armor) | |
(research ri-leather-archer-armor) | |
(research ri-ring-archer-armor)) | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(or (unit-type-count-total 944 >= high-min-number-upgrade) | |
(unit-type-count-total conquistador-line >= high-min-number-upgrade)) | |
=> | |
(research ri-padded-archer-armor) | |
(research ri-leather-archer-armor) | |
(research ri-ring-archer-armor)) | |
(defrule | |
(up-research-status c: ri-chain-mail >= research-pending) | |
(or (unit-type-count-total 906 >= high-min-number-upgrade) | |
(or (unit-type-count-total kamayuk >= high-min-number-upgrade) | |
(unit-type-count-total condottiero >= high-min-number-upgrade))) | |
=> | |
(research ri-forging) | |
(research ri-iron-casting) | |
(research ri-blast-furnace)) | |
(defrule | |
(up-research-status c: ri-chain-barding >= research-pending) | |
(or (unit-type-count-total scout-cavalry >= high-min-number-upgrade) | |
(or (unit-type-count-total 912 >= high-min-number-upgrade) | |
(or (unit-type-count-total magyar-huszar >= high-min-number-upgrade) | |
(unit-type-count-total boyar >= high-min-number-upgrade)))) | |
=> | |
(research ri-forging) | |
(research ri-iron-casting) | |
(research ri-blast-furnace)) | |
#end-if; test | |
#end-if | |
;********** SIEGE UNITS ********** | |
#load-if-not-defined POPULATION-CAP-25 | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal enemy-fortifications-goal 1) | |
(building-type-count castle > 0) | |
(current-age == imperial-age) | |
(unit-type-count-total trebuchet-set < 3) | |
(population >= max-civ-pop) | |
(game-time < 1200) | |
=> | |
(set-goal save-wood-goal 1) | |
(set-strategic-number sn-resource-control 2) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(unit-type-count battering-ram-line < 3) | |
(or | |
(players-building-type-count any-enemy castle > 1) | |
(players-building-type-count any-enemy stone-wall-line > 10) | |
) | |
) | |
(unit-type-count trebuchet-set == 0) | |
(building-type-count castle > 0) | |
(up-research-status c: ri-conscription != research-pending) | |
(current-age == imperial-age) | |
(unit-type-count trebuchet-set < 1) | |
(population >= max-civ-pop) | |
(wood-amount < 300) | |
=> | |
(set-goal save-wood-goal 1) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(unit-type-count battering-ram-line < 3) | |
(or | |
(players-building-type-count any-enemy castle > 1) | |
(players-building-type-count any-enemy stone-wall-line > 10) | |
) | |
) | |
(unit-type-count trebuchet-set == 0) | |
(building-type-count castle > 0) | |
(up-research-status c: ri-conscription != research-pending) | |
(current-age == imperial-age) | |
(unit-type-count trebuchet-set < 1) | |
(population >= max-civ-pop) | |
(wood-amount < 300) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
(defrule | |
(current-age >= imperial-age) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control == 2) | |
(unit-type-count trebuchet-set < 3) | |
(or (goal enemy-fortifications-goal 1) | |
(unit-type-count-total trebuchet-set < 1)) | |
(population >= del-civ-pop) | |
=> | |
(set-goal save-wood-goal 1) | |
(set-goal train-civ-goal -1) | |
) | |
(defrule | |
(population >= del-civ-pop) | |
(population-cap <= 250) | |
(unit-type-count battering-ram-line < 4) | |
(building-type-count siege-workshop > 0) | |
(unit-type-count trebuchet-set < 1) | |
(current-age == imperial-age) | |
(current-age-time > 180) | |
(wood-amount > 175) | |
(gold-amount > 75) | |
(unit-type-count-total villager >= 12) | |
=> | |
(delete-unit villager) | |
(set-goal train-civ-goal -1) | |
(set-strategic-number sn-resource-control 2) | |
) | |
(defrule | |
(population-cap <= 250) | |
(players-building-count any-enemy > 0) | |
(population >= del-civ-pop) | |
(civilian-population > max-civ) | |
(gold-amount > 1500) | |
(food-amount > 1500) | |
(current-age == imperial-age) | |
(current-age-time > 300) | |
(unit-type-count-total villager >= 12) | |
=> | |
(delete-unit villager) | |
(set-goal train-civ-goal -1) | |
) | |
(defrule | |
(building-type-count castle > 0) | |
(current-age == imperial-age) | |
(population >= del-civ-pop) | |
(population-cap <= 250) | |
(unit-type-count-total trebuchet-set < 4) | |
(or (goal enemy-fortifications-goal 1) | |
(unit-type-count-total trebuchet-set < 1)) | |
(wood-amount > 200) | |
(gold-amount > 200) | |
(can-afford-unit trebuchet) | |
(unit-type-count-total villager >= 12) | |
=> | |
(delete-unit villager) | |
(set-goal train-civ-goal -1) | |
(set-strategic-number sn-resource-control 2) | |
) | |
#load-if-not-defined HIGHLAND-MAP | |
#load-if-not-defined YUCATAN-MAP | |
(defrule | |
(population-cap <= 250) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(building-type-count-total dock > 0) | |
(or (warboat-count < 25) | |
(and (civilian-population > 50) | |
(and (can-afford-unit cannon-galleon-line) | |
(unit-type-count cannon-galleon-line < 6)))) | |
(population >= max-pop) | |
(unit-type-count-total villager >= 12) | |
=> | |
(delete-unit villager) | |
(set-goal train-civ-goal -1) | |
(set-strategic-number sn-resource-control 1) | |
(chat-to-player my-player-number "Execute villagers to make room for a bigger navy.") | |
) | |
#end-if | |
#end-if | |
#else | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(building-type-count-total dock > 0) | |
(or (and (unit-type-count villager >= max-civ) | |
(current-age == castle-age)) | |
(up-research-status c: ri-cannon-galleon >= research-pending)) | |
(population >= max-pop) | |
(unit-type-count-total villager >= 12) | |
=> | |
(delete-unit villager) | |
(set-goal train-civ-goal -1) | |
(set-strategic-number sn-resource-control 1) | |
(chat-to-player my-player-number "Execute villagers to make room for a bigger navy.") | |
) | |
(defrule | |
(population >= max-pop) | |
(or (strategic-number sn-resource-control == battering-ram) | |
(and (or (goal forward-threat-goal 1) | |
(military-population > 5)) | |
(and (unit-type-count battering-ram-line < 2) | |
(unit-type-count trebuchet-set < 1)))) | |
(unit-type-count-total villager >= 12) | |
=> | |
(delete-unit villager) | |
(set-goal train-civ-goal -1) | |
) | |
(defrule | |
(current-age == imperial-age) | |
(current-age-time > 300) | |
(population > del-civ-pop) | |
(strategic-number sn-resource-control < 2); no siege required from rules above | |
(up-compare-goal uu-up-goal != 1) | |
(goal escrow-purpose-goal 0) | |
(unit-type-count villager >= max-civ) | |
(unit-type-count-total villager >= 12) | |
=> | |
(delete-unit villager) | |
(set-goal train-civ-goal -1) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(or (wood-amount >= 2000) | |
(or (food-amount >= 2000) | |
(gold-amount >= 2000))) | |
(unit-type-count-total fishing-ship > 1) | |
(unit-type-count-total transport-ship < 1) | |
(population >= max-pop) | |
(current-age >= imperial-age) | |
(building-type-count dock >= 1) | |
=> | |
(delete-unit fishing-ship)) | |
(defrule | |
(timer-triggered two-minute-timer) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(or (wood-amount >= 2000) | |
(or (food-amount >= 2000) | |
(gold-amount >= 2000))) | |
(unit-type-count-total fishing-ship < 1) | |
(unit-type-count-total transport-ship < 1) | |
(population >= max-pop) | |
(current-age >= imperial-age) | |
(building-type-count dock >= 1) | |
(unit-type-count-total villager >= 12) | |
=> | |
(delete-unit villager)) | |
(defrule | |
(unit-type-count fishing-ship > 0) | |
(population >= del-civ-pop) | |
(housing-headroom < 10) | |
(or | |
(and | |
(food-amount > 500) | |
(goal train-civ-goal -1) | |
) | |
(and | |
(cc-players-unit-type-count 0 sea-fish == 0) | |
(cc-players-unit-type-count 0 shore-fish == 0) | |
) | |
) | |
=> | |
(delete-unit fishing-ship) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands); not on water maps | |
(dropsite-min-distance wood > 0) | |
(dropsite-min-distance wood < 20) | |
(goal train-civ-goal -1) | |
(strategic-number sn-resource-control < 1); no siege required from rules above | |
(civilian-population <= fourty-percent-pop); already deleted lots of villagers | |
=> | |
(set-goal train-civ-goal 1); restart villager training | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed) | |
(strategic-number sn-resource-control == 1) | |
(warboat-count >= 25) | |
(or | |
(up-research-status c: ri-cannon-galleon < research-pending) | |
(unit-type-count cannon-galleon-line > 7) | |
) | |
=> | |
(set-strategic-number sn-resource-control 0) | |
) | |
; order of rules does matter as 1st rule that will be executed 1st, so next rules may not spend the resources | |
; so put siege training above building | |
#load-if-not-defined AZTEC-CIV | |
#load-if-not-defined INCAN-CIV | |
#load-if-not-defined MAYAN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 2) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(up-research-status c: ri-cannon-galleon < research-pending) | |
(warboat-count > 30) | |
(civilian-population > 100) | |
(strategic-number sn-military-level >= 0) | |
(players-building-type-count any-enemy castle > 0) | |
(nand | |
(up-compare-goal aofe-game-goal != 1) | |
(civ-selected briton) | |
) | |
(nand | |
(up-compare-goal aofe-game-goal == 1) | |
(civ-selected hun) | |
) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
;debug (chat-to-player my-player-number "Saving resources for cannon-galleon") | |
) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(wood-amount < 200) | |
(gold-amount > 500) | |
(unit-type-count trade-cart > 4) | |
(or | |
(or | |
(strategic-number sn-resource-control == 2) | |
(gold-amount > 1500) | |
) | |
(and | |
(commodity-buying-price wood < 30) | |
(gold-amount > 800) | |
) | |
) | |
(commodity-buying-price wood < 80) | |
=> | |
(buy-commodity wood) | |
(chat-local-to-self "4 Buy cheap wood with trade cart gold") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(warboat-count >= 17) | |
(or | |
(or | |
(cc-players-unit-type-count any-enemy castle-arrow > 0) | |
(cc-players-unit-type-count any-enemy castle-arrow-chemistry > 0) | |
) | |
(cc-players-unit-type-count any-enemy 506 > 0) | |
) | |
(unit-type-count cannon-galleon-line < 4) | |
(can-train-with-escrow cannon-galleon-line) | |
=> | |
(release-escrow wood)(release-escrow gold) | |
(train cannon-galleon-line) | |
) | |
#load-if-defined DEFEND-WONDER | |
(defrule | |
(building-type-count wonder == 0) | |
(unit-type-count-total trebuchet-set < 2) | |
(can-train trebuchet) | |
=> | |
(train trebuchet) | |
) | |
#end-if | |
(defrule | |
(unit-type-count-total trebuchet-set < 2) | |
(or | |
(unit-type-count-total monastery-class > 20) | |
(difficulty < moderate) | |
) | |
(can-train-with-escrow trebuchet) | |
=> | |
(release-escrow wood)(release-escrow gold) | |
(train trebuchet) | |
) | |
(defrule | |
(population > max-civ-pop) | |
(or | |
(or | |
(unit-type-count trebuchet-set < 2) | |
(game-time < 1200); start in DM | |
) | |
(or | |
(goal enemy-fortifications-goal 1) | |
(players-building-type-count any-enemy castle > 1) | |
) | |
) | |
(unit-type-count trebuchet-set < 5) | |
(can-train trebuchet) | |
=> | |
(train trebuchet) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(unit-type-count-total battering-ram-line < number-rams) | |
(population >= seventy-five-percent-pop) | |
(can-train battering-ram-line) | |
=> | |
(train battering-ram-line) | |
) | |
#load-if-defined POPULATION-CAP-200 | |
(defrule | |
(building-type-count-total town-center < 3) | |
(or | |
(and | |
(strategic-number sn-military-level < 2) | |
(population-cap >= 225) | |
) | |
(goal unit-goal knight) | |
) | |
(strategic-number sn-military-level < 2) | |
=> | |
(up-jump-rule 1) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(and | |
(building-type-count-total town-center >= 3) | |
(wood-amount > 300) | |
) | |
(and | |
(unit-type-count-total battering-ram-line < 2) | |
(strategic-number sn-military-level > 0) | |
) | |
) | |
(military-population > 10) | |
(or | |
(strategic-number sn-military-level >= 0) | |
(population >= del-civ-pop) | |
) | |
(unit-type-count-total battering-ram-line < 5) | |
(can-train battering-ram-line) | |
=> | |
(train battering-ram-line) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(strategic-number sn-resource-control < 3) | |
(unit-type-count mangonel-line < 2) | |
(or | |
(unit-type-count ranged-unit-class > high-min-number-upgrade) | |
(unit-type-count cavalry-archer-class > mid-min-number-upgrade) | |
) | |
(players-unit-type-count focus-player skirmisher-line > 12) | |
(can-train mangonel-line) | |
=> | |
(train mangonel-line) | |
) | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(strategic-number sn-resource-control < 3) | |
(unit-type-count mangonel-line < 2) | |
(building-type-count-total town-center >= tc-level-two) | |
(goal unit-goal my-unique-unit-line) | |
(players-current-age focus-player == feudal-age) | |
(wood-amount >= 200) | |
(current-age >= castle-age) | |
(can-train mangonel-line) | |
=> | |
(train mangonel-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 3) | |
(unit-type-count mangonel-line < 1) | |
(or | |
(and | |
(goal unit-goal my-unique-unit-line); assume we have a ranged uu | |
(unit-type-count ranged-unit-class > mid-min-number-upgrade) | |
) | |
(goal unit-goal scorpion) | |
) | |
(or | |
(players-unit-type-count focus-player mangonel-line > 1) | |
(players-unit-type-count focus-player scorpion-line > 4) | |
) | |
(can-train mangonel-line) | |
=> | |
(train mangonel-line) | |
) | |
(defrule | |
(up-compare-goal control-goal != shot) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(strategic-number sn-resource-control != battering-ram) | |
(strategic-number sn-resource-control != ri-elite-skirmisher) | |
(strategic-number sn-archer-threat > 1) | |
(current-age == castle-age) | |
(unit-type-count-total mangonel-line < 1) | |
(building-type-count siege-workshop >= 1) | |
(nor | |
(can-afford-unit mangonel-line) | |
(up-research-status c: ri-elite-skirmisher >= research-pending) | |
) | |
=> | |
(set-strategic-number sn-resource-control mangonel) | |
(set-goal save-wood-goal 1) | |
;debug (chat-to-player my-player-number "Saving resources for mangonel") | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(strategic-number sn-archer-threat > 1) | |
(players-unit-type-count focus-player scorpion-line > 5) | |
) | |
(or | |
(current-age == castle-age) | |
(or | |
(strategic-number sn-archer-threat > 2) | |
(players-unit-type-count focus-player scorpion-line > 11) | |
) | |
) | |
(unit-type-count mangonel-line < 1) | |
(can-train mangonel-line) | |
=> | |
(train mangonel-line) | |
) | |
(defrule | |
(or | |
(strategic-number sn-resource-control < 3) | |
(and | |
(strategic-number sn-resource-control == ri-elite-eagle-warrior) | |
(food-amount < 700) | |
) | |
) | |
(up-research-status c: ri-elite-eagle-warrior < research-complete); EW die to massed ranged, EEW don't | |
(or | |
(strategic-number sn-archer-threat > 2) | |
(players-unit-type-count focus-player scorpion-line > 11) | |
) | |
(unit-type-count-total mangonel-line < 2) | |
(goal unit-goal eagle-warrior) | |
(up-compare-goal control-goal != shot) | |
(can-train mangonel-line) | |
=> | |
(train mangonel-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(or | |
(strategic-number sn-archer-threat > 3) | |
(players-unit-type-count focus-player scorpion-line > 15) | |
) | |
(and | |
(or | |
(strategic-number sn-archer-threat > 2) | |
(players-unit-type-count focus-player scorpion-line > 8) | |
) | |
(unit-type-count trade-cart > 15) | |
) | |
) | |
=> | |
(research ri-onager) | |
(research ri-siege-onager) | |
(research 445); ri-shinkichon | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(players-unit-type-count focus-player galley-line > 20) | |
(or | |
(warboat-count < 15) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed) | |
) | |
=> | |
(research ri-onager) | |
(research ri-siege-onager) | |
(research 445); ri-shinkichon | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(strategic-number sn-archer-threat > 2) | |
(or | |
(players-unit-type-count focus-player scorpion-line > 8) | |
(players-unit-type-count focus-player galley-line > 15) | |
) | |
) | |
(up-research-status c: ri-onager >= research-pending) | |
(unit-type-count mangonel-line < 4) | |
(can-train mangonel-line) | |
=> | |
(train mangonel-line) | |
) | |
#load-if-not-defined POPULATION-CAP-25 | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(military-population > 20) | |
(unit-type-count battering-ram-line < 5) | |
(or | |
(strategic-number sn-military-level >= 0) | |
(population > sixty-percent-pop) | |
) | |
(can-train battering-ram-line) | |
=> | |
(train battering-ram-line) | |
) | |
#else | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(goal unit-goal monk) | |
(nand | |
(unit-available trebuchet) | |
(unit-type-count trebuchet-set < 1) | |
) | |
(military-population > 20) | |
(unit-type-count battering-ram-line < 2) | |
(or | |
(strategic-number sn-military-level >= 0) | |
(population > sixty-percent-pop) | |
) | |
(can-train battering-ram-line) | |
=> | |
(train battering-ram-line) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control != ri-elite-skirmisher) | |
(population > max-civ-pop) | |
(or | |
(unit-type-count battering-ram-line < 4) | |
(up-research-status c: ri-siege-ram >= research-pending) | |
) | |
(or | |
(goal enemy-fortifications-goal 1) | |
(unit-type-count battering-ram-line < 6) | |
) | |
(unit-type-count battering-ram-line < 12) | |
(can-train battering-ram-line) | |
=> | |
(train battering-ram-line) | |
) | |
; Relic Monks | |
(defrule | |
(or (strategic-number sn-resource-control < 1) | |
(gold-amount > 250)) | |
(current-age == castle-age) | |
(current-age-time < 480) | |
(unit-type-count-total monk < 3) | |
(unit-type-count-total 134 == 0); 134 = dead monk; dont make monks when they're dying while trying to collect relics behind enemy bases. | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
#end-if | |
(defrule | |
(or (strategic-number sn-resource-control < 1) | |
(strategic-number sn-resource-control == monk)) | |
(unit-type-count-total monk == 0) | |
(unit-type-count-total 134 == 0); 134 = dead monk; dont make monks when they're dying while trying to collect relics behind enemy bases. | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
; Trade | |
(defrule | |
(nor (research-available ri-double-bit-axe) | |
(research-available ri-horse-collar)) | |
(goal strategy-goal sling) | |
(can-research ri-coinage) | |
=> | |
(research ri-coinage) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (strategic-number sn-current-age >= ci-transit) | |
(and (and (food-amount > 500) | |
(gold-amount < 200)) | |
(unit-type-count villager > villager-coinage))) | |
(or (unit-type-count villager > villager-coinage) | |
(unit-type-count villager >= max-civ)) | |
(players-building-type-count any-ally market > 0) | |
(can-research ri-coinage) | |
=> | |
(research ri-coinage) | |
) | |
(defrule | |
(or (and (strategic-number sn-resource-control <= 2) | |
(strategic-number sn-current-age >= ci-transit)) | |
(strategic-number sn-resource-control == sling)) | |
(players-building-type-count any-ally market > 0) | |
(can-research ri-banking) | |
=> | |
(research ri-banking) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (unit-type-count-total trade-cart >= 6) | |
(unit-type-count-total trade-cog >= 6)) | |
(can-research-with-escrow ri-caravan) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-caravan) | |
) | |
#load-if-not-defined DEFEND-WONDER | |
#load-if-not-defined POPULATION-CAP-25 | |
#load-if-not-defined POPULATION-CAP-50 | |
#load-if-defined ITALIAN-CIV | |
(defrule | |
(unit-type-count trade-cart < 15) | |
(player-in-game any-ally) | |
(can-research ri-silk-road) | |
=> | |
(research ri-silk-road) | |
) | |
#end-if | |
(defrule | |
(or (or (not(player-in-game any-ally)) | |
(or (players-building-type-count every-ally market == 0) | |
(building-type-count town-center == 0))) | |
(or (unit-type-count-total trade-cart >= max-trade-pop); depending on popcap and difficulty | |
(unit-type-count-total trade-cart >= max-trade-cart))); depending on map size | |
=> | |
(up-jump-rule 2); rule too long | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (research-available imperial-age) | |
(strategic-number sn-current-age >= ci-transit)) | |
(or (strategic-number sn-minimum-water-body-size-for-dock <= water-mixed) | |
(map-type team-islands)) | |
(or (or (game-time > 2100);35 min | |
(and (unit-type-count battering-ram-line > 1) | |
(goal unit-goal monk))) | |
(death-match-game)) | |
(can-train trade-cart) | |
=> | |
(train trade-cart) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(goal strategy-goal sling) | |
(goal under-attack-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock <= water-mixed) | |
(game-time > 1800) | |
(can-train trade-cart) | |
=> | |
(train trade-cart) | |
) | |
(defrule | |
(or (unit-type-count 178 > 0);dead trade cart (empty/loaded) | |
(unit-type-count 205 > 0)) | |
=> | |
(set-strategic-number sn-preferred-trade-distance 60) | |
) | |
(defrule | |
(unit-type-count 178 == 0) | |
(unit-type-count 205 == 0) | |
=> | |
(set-strategic-number sn-preferred-trade-distance trade-distance) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if ; NO WONDER-RACE | |
; VILLAGERS | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count-total villager >= villager-feudal); object-type-count-total ; also for others below | |
(or (or (difficulty != hardest) | |
(game-type == 8)) | |
(or (starting-resources != low-resources) | |
(or (strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(map-type yucatan)))) | |
=> | |
(set-strategic-number sn-enable-training-queue 0) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count-total villager >= villager-flush) | |
(or (goal strategy-goal flush) | |
(and (unit-type-count-total villager >= dark-age-villager) | |
(or (unit-type-count-total villager >= 32); allows better boom if pocket | |
(or (up-compare-goal position-goal == flank) | |
(or (goal unit-goal my-unique-unit-line); but don't do with UU, to get the castle faster (prevent rush) | |
(goal unit-goal monk)))))) | |
=> | |
(set-strategic-number sn-enable-training-queue 0) | |
) | |
(defrule | |
(or (and (current-age == feudal-age) | |
(or (food-amount > 500) | |
(strategic-number sn-current-age == fc-transit))) | |
(or (and (goal need-loom-goal 1) | |
(research-available ri-loom)) | |
(and (current-age < imperial-age) | |
(death-match-game)))) | |
=> | |
(set-strategic-number sn-enable-training-queue 0) | |
) | |
(defrule | |
(current-age >= castle-age) | |
(or (up-compare-goal strategy-goal != boom) | |
(or (strategic-number sn-resource-control > 2) | |
(and (research-available imperial-age); (strategic-number sn-current-age == castle) | |
(and (food-amount >= imp-f2) | |
(gold-amount >= imp-g2))))) | |
=> | |
(set-strategic-number sn-enable-training-queue 0) | |
) | |
(defrule | |
(current-age == castle-age) | |
(strategic-number sn-current-age == castle) | |
(research-available imperial-age) | |
(food-amount >= imp-food) | |
(gold-amount >= imp-gold) | |
=> | |
(set-strategic-number sn-enable-training-queue 0) | |
) | |
(defrule | |
(or (and (strategic-number sn-current-age >= ci-transit) | |
(strategic-number sn-resource-control >= 1)) | |
(or (population >= max-civ-pop) | |
(and (goal strategy-goal flush) | |
(current-age-time < 300)))) | |
(current-age >= feudal-age) | |
=> | |
(set-strategic-number sn-enable-training-queue 0) | |
) | |
#load-if-not-defined DEATH-MATCH | |
#load-if-not-defined HIGH-RESOURCES-START | |
#load-if-not-defined MEDIUM-RESOURCES-START | |
(defrule | |
(civilian-population < max-civ); difficulty | |
(or (and (current-age == dark-age) | |
(unit-type-count villager < 33)) | |
(current-age == feudal-age)) | |
(up-compare-goal unit-goal != wonder) | |
(unit-type-count villager < 35) | |
(goal strategy-goal fast-imp) | |
(goal train-civ-goal 1) | |
(can-train villager) | |
=> | |
(disable-timer FDrop) | |
(enable-timer FDrop 21) | |
(train villager) | |
; (chat-local-to-self "Fast-imp test.") | |
) | |
#load-if-defined WONDER-RACE | |
(defrule | |
(civilian-population < max-civ); difficulty | |
(or (or (and (current-age == dark-age) | |
(unit-type-count villager < villager-wonder-dark)) | |
(and (current-age >= feudal-age) | |
(unit-type-count villager < villager-wonder-feudal))) | |
(current-age == imperial-age)) | |
(goal train-civ-goal 1) | |
(can-train villager) | |
=> | |
(disable-timer FDrop) | |
(enable-timer FDrop 21) | |
(train villager) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-not-defined WONDER-RACE | |
(defrule | |
(civilian-population >= max-civ); difficulty | |
=> | |
(up-jump-rule 6)) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager < 31) | |
(nor (goal strategy-goal flush) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands)) | |
(or (unit-type-count villager < dark-age-villager) | |
(or (food-amount < 700); 620 | |
(unit-type-count villager < villager-feudal))) | |
(or (food-amount < 820) | |
(unit-type-count villager < 23)) | |
(goal train-civ-goal 1) | |
(can-train villager) | |
=> | |
(disable-timer FDrop) | |
(enable-timer FDrop 21) | |
(train villager)) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager < 31) | |
;(or (unit-type-count villager < villager-feudal) | |
(or (goal strategy-goal flush) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands)) | |
(or (unit-type-count villager < villager-feudal) | |
(food-amount < 430)) | |
(goal train-civ-goal 1) | |
(can-train villager) | |
=> | |
(disable-timer FDrop) | |
(enable-timer FDrop 21) | |
(train villager)) | |
(defrule | |
(goal train-civ-goal 1) | |
(current-age == feudal-age) | |
(or (goal strategy-goal flush) | |
(goal strategy-goal sling)) | |
(or (not (research-available castle-age)) | |
(or (food-amount < 740) | |
(gold-amount < 160))) | |
(unit-type-count-total villager < max-civ) | |
(population < max-civ-pop) | |
(can-train villager) | |
=> | |
(disable-timer FDrop) | |
(enable-timer FDrop 21) | |
(train villager)) | |
(defrule | |
(goal train-civ-goal 1) | |
(food-amount < 500) ; else escrow | |
(strategic-number sn-current-age == feudal) | |
(population < max-civ-pop) | |
(can-train villager) | |
=> | |
(disable-timer FDrop) | |
(enable-timer FDrop 21) | |
(train villager)) | |
(defrule | |
(goal train-civ-goal 1) | |
(up-pending-objects c: villager <= 0) | |
(food-amount >= 750) | |
; (building-type-count blacksmith == 0) | |
(building-type-count archery-range == 0) | |
(building-type-count stable == 0) | |
(building-type-count market == 0) | |
(strategic-number sn-current-age == feudal) | |
(population < max-civ-pop) | |
(can-train villager) | |
=> | |
(disable-timer FDrop) | |
(enable-timer FDrop 21) | |
(train villager)) | |
(defrule | |
(goal train-civ-goal 1) | |
(current-age >= castle-age) | |
(civilian-population < max-civ) | |
(or (population < max-civ-pop) | |
(game-time < 1800)); keep training villagers in DM | |
(can-train villager) | |
=> | |
(disable-timer FDrop) | |
(enable-timer FDrop 21) | |
(train villager)); End jump | |
#load-if-defined POPULATION-CAP-200 | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
#load-if-not-defined DIFFICULTY-MODERATE | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(civilian-population < max-civ); difficulty | |
(goal train-civ-goal 1) | |
(strategic-number sn-current-age == castle) | |
(food-amount > 200) | |
(gold-amount < 600) | |
(population < max-civ-pop) | |
(civilian-population < 140) | |
(or (goal unit-goal knight); train extra villagers with knights or elephants | |
(civ-selected persian)) | |
(can-train villager) | |
=> | |
(disable-timer FDrop) | |
(enable-timer FDrop 21) | |
(train villager) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
(defrule | |
(strategic-number sn-current-age != dark) | |
=> | |
(up-jump-rule 5)) | |
(defrule | |
(or (game-time >= 76) | |
(civ-selected chinese)) | |
; (unit-type-count-total villager >= 7);7 | |
(up-pending-objects c: villager <= 1) | |
(up-research-status c: ri-loom != research-pending) | |
(timer-triggered FDrop) | |
;j (strategic-number sn-current-age == dark) | |
(or (and (food-amount < 50) | |
(housing-headroom > 0)) | |
(and (food-amount < 500) | |
(and (unit-type-count villager >= 20) | |
(food-amount >= 400))));hopefully boar food too | |
=> | |
(chat-to-player my-player-number "123")) | |
(defrule | |
(or (game-time >= 76) | |
(civ-selected chinese)) | |
(up-pending-objects c: villager == 0) | |
(up-research-status c: ri-loom != research-pending) | |
(up-timer-status FDrop != timer-running) | |
;j (strategic-number sn-current-age == dark) | |
(or (and (food-amount < 50) | |
(housing-headroom > 0)) | |
(and (food-amount < 500) | |
(and (unit-type-count villager >= 20) | |
(food-amount >= 400))));hopefully boar food too | |
=> | |
(chat-to-player my-player-number "123")) | |
(defrule | |
(taunt-detected my-player-number 123) | |
(up-pending-objects c: villager <= 1) | |
(up-research-status c: ri-loom != research-pending) | |
;j (strategic-number sn-current-age == dark) | |
=> | |
(acknowledge-taunt my-player-number 123) | |
(disable-timer FDrop) | |
; (enable-timer FDrop 2) | |
; (chat-local-to-self "Forced drop.") | |
(up-drop-resources forage-food c: 4) | |
(up-drop-resources sheep-food c: 4) | |
(up-drop-resources boar-food c: 4)) | |
(defrule | |
(taunt-detected my-player-number 123) | |
=> | |
(disable-timer FDrop) | |
; (enable-timer FDrop 2) | |
; (chat-local-to-self "Denying forced drop.") | |
(acknowledge-taunt my-player-number 123)) | |
(defrule | |
(timer-triggered FDrop) | |
(up-pending-objects c: villager >= 2) | |
(building-type-count town-center <= 1) | |
=> | |
(disable-timer FDrop) | |
; (chat-local-to-self "Denying forced drop2.") | |
) | |
(defrule | |
(building-type-count-total blacksmith >= 1) | |
=> | |
(enable-timer FDrop 15) | |
(disable-self)) | |
(defrule | |
(timer-triggered FDrop) | |
(strategic-number sn-current-age == feudal) | |
(food-amount < 800) | |
(food-amount >= 700) | |
(gold-amount >= 165) | |
=> | |
(chat-to-player my-player-number "123")) | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(building-type-count-total blacksmith >= 1) | |
(up-research-status c: ri-wheel-barrow != research-pending) | |
(taunt-detected my-player-number 123) | |
=> | |
(acknowledge-taunt my-player-number 123) | |
(disable-timer FDrop) | |
(enable-timer FDrop 2) | |
; (chat-local-to-self "Forced drop.") | |
(up-drop-resources food c: 4)) | |
(defrule | |
(timer-triggered FDrop) | |
(strategic-number sn-current-age == feudal) | |
(food-amount >= 740) | |
(gold-amount < 200) | |
(gold-amount >= 165) | |
=> | |
(chat-to-player my-player-number "124")) | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(building-type-count-total blacksmith >= 1) | |
(up-research-status c: ri-wheel-barrow != research-pending) | |
(taunt-detected my-player-number 124) | |
=> | |
(acknowledge-taunt my-player-number 124) | |
(disable-timer FDrop) | |
(enable-timer FDrop 2) | |
; (chat-local-to-self "Forced drop.") | |
(up-drop-resources gold c: 5)) | |
(defrule | |
(timer-triggered FDrop) | |
(strategic-number sn-current-age > feudal) | |
=> | |
(disable-timer FDrop) | |
(disable-self)) | |
(defrule | |
(or (taunt-detected my-player-number 123) | |
(taunt-detected my-player-number 124)) | |
(strategic-number sn-current-age > feudal) | |
=> | |
(acknowledge-taunt my-player-number 123) | |
(acknowledge-taunt my-player-number 124) | |
(disable-self)) | |
#end-if | |
#end-if | |
;********** BUILDINGS ********** | |
#load-if-defined VICTORY-STANDARD | |
(defrule | |
(goal nomad no) | |
(goal landnomad no) | |
(building-type-count-total wonder >= 1) | |
=> | |
(enable-wall-placement 2) | |
(disable-self)) | |
(defrule | |
(goal nomad no) | |
(goal landnomad no) | |
(building-type-count-total wonder >= 1) | |
(building-type-count-total gate < 5) | |
(can-build-gate 2) | |
=> | |
(build-gate 2)) | |
(defrule | |
(goal nomad no) | |
(goal landnomad no) | |
(building-type-count-total wonder >= 1) | |
(can-build-wall 2 stone-wall-line) | |
=> | |
(build-wall 2 stone-wall-line)) | |
(defrule | |
(building-type-count-total wonder < 1) | |
(players-building-type-count every-ally wonder < 1) | |
(can-build wonder) | |
=> | |
(build wonder)) | |
#end-if | |
#load-if-not-defined DARK-AGE-END; in case it gets implemented later | |
#load-if-not-defined FEUDAL-AGE-END | |
#load-if-not-defined UP-SCENARIO-GAME; don't want to screw up beautiful scenarios | |
(defrule | |
(building-type-count wall-class <= 0) | |
(building-type-count gate-class <= 0) | |
=> | |
(up-jump-rule 1)) | |
(defrule | |
(game-time > 300) | |
(building-type-count-total wonder <= 0) | |
(not (hold-relics)); for now | |
(or (population >= del-civ-pop) | |
(and (civilian-population >= max-civ) | |
(military-population >= 50))) | |
=> | |
(delete-building 939); gate | |
(delete-building stone-wall-line)) | |
#end-if | |
#end-if | |
#end-if | |
#load-if-defined VICTORY-STANDARD | |
(defrule | |
(taunt-detected any-ally 37) | |
(building-available wonder) | |
(building-type-count-total wonder < 1) | |
(wood-amount >= 1100) | |
(gold-amount < 1000) | |
(can-sell-commodity wood) | |
=> | |
(sell-commodity wood)) | |
(defrule | |
(taunt-detected any-ally 37) | |
(building-available wonder) | |
(building-type-count-total wonder < 1) | |
(wood-amount < 1000) | |
(gold-amount >= 1175) | |
(commodity-buying-price wood <= 175) | |
=> | |
(buy-commodity wood)) | |
(defrule | |
(taunt-detected any-ally 37) | |
(building-available wonder) | |
(building-type-count-total wonder < 1) | |
(food-amount >= 1100); for now | |
(gold-amount < 1000) | |
(can-sell-commodity food) | |
=> | |
(sell-commodity food)) | |
(defrule | |
(taunt-detected any-ally 37) | |
(building-available wonder) | |
(building-type-count-total wonder < 1) | |
(stone-amount < 1000) | |
(gold-amount >= 1250) | |
(commodity-buying-price stone <= 250) | |
=> | |
(buy-commodity stone)) | |
(defrule | |
(taunt-detected any-ally 37) | |
(building-type-count-total wonder < 1) | |
(can-build wonder) | |
=> | |
(build wonder) | |
(acknowledge-taunt every-ally 37)) | |
#end-if | |
(defrule | |
(taunt-detected any-ally 37) | |
(building-type-count-total wonder >= 1) | |
=> | |
(chat-to-allies-using-id 22118); "Alas, I cannot help that at this time." | |
(acknowledge-taunt every-ally 37)) | |
#load-if-not-defined VICTORY-STANDARD | |
(defrule | |
(taunt-detected any-ally 37) | |
=> | |
(chat-to-allies-using-id 22118); "Alas, I cannot help that at this time." | |
(acknowledge-taunt every-ally 37)) | |
#end-if | |
#load-if-defined VICTORY-STANDARD | |
(defrule | |
(taunt-detected any-ally 37) | |
(stone-amount < 1650) | |
=> | |
(up-jump-rule 4)); block until we have a wonder | |
#end-if | |
(defrule | |
(up-pending-objects c: castle < 2) | |
(unit-type-count-total villager >= villager-castle) | |
(building-available castle) | |
(stone-amount >= castle-stone) | |
(goal increase-town-size-goal 0) | |
=> | |
(set-goal increase-town-size-goal castle) | |
(enable-timer increase-town-size-timer 4)) | |
(defrule | |
(goal increase-town-size-goal castle) | |
(stone-amount < castle-stone) | |
=> | |
(set-goal increase-town-size-goal 2)) | |
(defrule | |
(goal increase-town-size-goal castle) | |
(strategic-number sn-maximum-town-size >= 60) | |
(strategic-number sn-target-player-number g:== closest-enemy-goal); up-compare-sn ; same for others below | |
(building-type-count castle > 0) | |
;(or (up-compare-const allow-forward-castle == 1) | |
(building-type-count-total castle > 2);) | |
(stone-amount >= castle-stone) | |
(can-build castle) | |
=> | |
(build-forward castle) | |
(set-goal forward-goal 1) | |
(set-goal increase-town-size-goal 2)) | |
(defrule | |
(goal increase-town-size-goal castle) | |
; (stone-amount >= castle-stone) | |
(can-build castle) | |
=> | |
(build castle) | |
(set-goal increase-town-size-goal 2)) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(up-research-status c: ri-bombard-tower >= research-pending) | |
(or (building-type-count-total bombard-tower < 10) | |
(gold-amount > 2500)) | |
(unit-type-count trade-cart > 14) | |
(unit-type-count 42 > 0); trebuchets in siege mode | |
(population > del-civ-pop); high pop | |
(can-buy-commodity stone) | |
(gold-amount >= 900) | |
(stone-amount < 100) | |
(commodity-buying-price stone < 400) | |
=> | |
(buy-commodity stone) | |
(chat-to-player my-player-number "6Buying stone to push with bbt.") | |
) | |
(defrule | |
(or (strategic-number sn-archer-threat > 1) | |
(players-unit-type-count focus-player scorpion-line > 9)) | |
(goal unit-goal monk) | |
(building-type-count-total siege-workshop < 1) | |
(building-type-count-total monastery > 0) | |
=> | |
(up-jump-rule 1) | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(goal increase-town-size-goal 0) | |
(goal unit-goal monk) | |
(or | |
(and | |
(building-type-count-total monastery < 3) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
) | |
(and | |
(current-age == imperial-age) | |
(current-age-time > 180) | |
) | |
) | |
(goal save-wood-goal 0) | |
(building-type-count-total monastery < 5) | |
(can-build monastery) | |
=> | |
(build monastery) | |
(set-goal increase-town-size-goal 2) | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(goal increase-town-size-goal 0) | |
(goal ranged-unit-type-goal monk) | |
(strategic-number sn-current-age >= ci-transit) | |
(building-type-count-total monastery < 3) | |
(wood-amount > 300) | |
(goal save-wood-goal 0) | |
(can-build monastery) | |
=> | |
(build monastery) | |
(set-goal increase-town-size-goal 2) | |
) | |
#load-if-defined CAPTURE-THE-RELIC ; for scenarios etc | |
(defrule | |
(building-type-count town-center > 0) | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-current-age >= ci-transit) | |
(building-type-count-total monastery < 1) | |
(wood-amount > 200); 300 | |
(goal save-wood-goal 0) | |
(can-build monastery) | |
=> | |
(build monastery) | |
(set-goal increase-town-size-goal 2) | |
) | |
#end-if | |
#load-if-defined AZTEC-CIV | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal save-wood-goal 0) | |
(building-type-count-total siege-workshop > 0) | |
(building-type-count-total town-center >= tc-level-three) | |
(or | |
(building-type-count-total monastery < 2) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(building-type-count-total monastery < 3) | |
(nor | |
(goal enemy-goal eagle-warrior) | |
(or | |
(goal unit-goal archer) | |
(goal unit-goal eagle-warrior) | |
) | |
) | |
(can-build monastery) | |
=> | |
(build monastery) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal save-wood-goal 0) | |
(building-type-count-total town-center >= tc-level-two) | |
(or | |
(building-type-count-total town-center >= tc-level-three) | |
(building-type-count-total monastery < 2) | |
) | |
(or | |
(building-type-count-total town-center >= tc-level-four) | |
(building-type-count-total monastery < 3) | |
) | |
(building-type-count-total monastery < 5) | |
(goal ranged-unit-type-goal monk) | |
(can-build monastery) | |
=> | |
(build monastery) | |
) | |
#else | |
(defrule | |
(unit-type-count villager > villager-monastery) | |
(or | |
(or | |
(players-civ every-enemy indian) | |
(players-civ every-enemy slavic) | |
) | |
(or | |
(or | |
(players-civ every-enemy gothic) | |
(players-civ every-enemy persian) | |
) | |
(or | |
(players-civ every-enemy korean) | |
(players-civ every-enemy chinese) | |
) | |
) | |
) | |
(building-type-count-total monastery < 5) | |
(can-build monastery) | |
=> | |
(build monastery) | |
) | |
#end-if | |
#end-if | |
#load-if-not-defined DEATH-MATCH | |
#load-if-defined BRITON-CIV | |
(defrule | |
(up-compare-goal strategy-goal != boom) | |
(or | |
(and | |
(and | |
(goal unit-goal archer) | |
(goal control-goal aggressive-rush) | |
) | |
(or | |
(building-type-count-total archery-range < 4); don't mess up build order because british TC discount | |
(building-type-count-total siege-workshop < 1) | |
) | |
) | |
(and | |
(building-type-count-total monastery < 1) | |
(building-type-count-total town-center > 1) | |
) | |
) | |
=> | |
(up-jump-rule 2) | |
) | |
#end-if | |
(defrule | |
(or | |
(or | |
(and | |
(goal strategy-goal fast-imp) | |
(and | |
(current-age < imperial-age) | |
(wood-amount < 400) | |
) | |
) | |
(and | |
(goal strategy-goal shot) | |
(building-type-count-total siege-workshop == 0) | |
) | |
) | |
(and | |
(goal unit-goal my-unique-unit-line) | |
(building-type-count-total castle == 0) | |
) | |
) | |
=> | |
(up-jump-rule 1) | |
) | |
(defrule | |
(goal save-wood-goal 0) | |
(current-age >= castle-age) | |
(can-afford-building town-center) | |
(building-type-count-total town-center < 5) | |
(goal increase-town-size-goal 0) | |
=> | |
(enable-timer increase-town-size-timer 6) | |
(set-goal increase-town-size-goal town-center) | |
) | |
(defrule | |
(goal increase-town-size-goal town-center) | |
(strategic-number sn-current-age == castle) | |
(building-type-count town-center >= 1) | |
(goal unit-goal monk) | |
(not (research-available imperial-age)) | |
=> | |
(disable-timer increase-town-size-timer) | |
(set-goal increase-town-size-goal 0) | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(current-age >= castle-age) | |
(goal increase-town-size-goal town-center) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal unit-goal archer) | |
(goal strategy-goal rush) | |
(players-building-type-count focus-player watch-tower > 0) | |
(building-type-count-total siege-workshop < 1) | |
=> | |
(set-goal increase-town-size-goal 0) | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(goal save-wood-goal 0) | |
(goal increase-town-size-goal town-center) | |
(building-type-count-total town-center < 5) | |
(can-build town-center) | |
=> | |
(build town-center) | |
) | |
#else; => DM | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(goal save-wood-goal 0) | |
(building-type-count-total monastery > 0) | |
(building-type-count-total siege-workshop > 0) | |
(building-type-count-total town-center < 5) | |
(goal increase-town-size-goal 0) | |
(can-build town-center) | |
=> | |
(build town-center) | |
) | |
(defrule | |
(unit-type-count villager < 15) | |
(building-type-count-total town-center >= 1); test | |
(goal increase-town-size-goal town-center) | |
=> | |
(set-goal increase-town-size-goal 0) | |
) | |
#end-if | |
#end-if | |
#end-if; NOT WONDER-RACE | |
#load-if-not-defined DEATH-MATCH | |
(defrule | |
(current-age == feudal-age) | |
(or | |
(up-research-status c: ri-wheel-barrow != research-pending) | |
(current-age-time > 40) | |
) | |
(current-age-time > 20) | |
(food-amount > 700) | |
(up-compare-goal strategy-goal != flush) | |
(building-type-count-total blacksmith == 0) | |
=> | |
(up-assign-builders c: blacksmith c: 3)(disable-self) | |
) | |
(defrule | |
(current-age-time < 10) | |
(current-age == feudal-age) | |
(or | |
(and | |
(up-pending-objects c: villager > 0) | |
(food-amount > 700) | |
) | |
(or | |
(goal strategy-goal flush) | |
(goal strategy-goal sling) | |
) | |
) | |
=> | |
(up-assign-builders c: archery-range c: 2) | |
(up-assign-builders c: stable c: 2) | |
(up-assign-builders c: market c: 2)(disable-self) | |
) | |
#end-if | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(building-type-count-total town-center < 3) | |
=> | |
(set-goal increase-town-size-goal 0) | |
(up-jump-rule 3) | |
) | |
(defrule | |
(goal save-wood-goal 0) | |
(goal increase-town-size-goal 0) | |
(current-age >= castle-age) | |
(building-type-count-total town-center > 0) | |
(player-in-game any-ally) | |
(up-compare-goal strategy-goal != boom) | |
(or | |
(building-type-count-total town-center >= tc-level-two) | |
(nor | |
(goal unit-goal knight) | |
(goal unit-goal archer) | |
) | |
) | |
(building-type-count-total monastery == 0) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal monastery) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal save-wood-goal 0) | |
(goal increase-town-size-goal 0) | |
(current-age >= castle-age) | |
(building-type-count-total town-center > 0) | |
(or | |
(and | |
(goal strategy-goal boom) | |
(building-type-count-total town-center >= tc-boom-monastery) | |
) | |
(goal strategy-goal fast-imp) | |
) | |
(building-type-count-total monastery == 0) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal monastery) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(current-age >= castle-age) | |
(building-type-count-total town-center > 0) | |
(or | |
(goal unit-goal wonder) | |
(not (player-in-game any-ally)) | |
) | |
(building-type-count-total monastery == 0) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal monastery) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(current-age >= castle-age) | |
(building-type-count-total town-center > 0) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(building-type-count-total monastery == 0) | |
(wood-amount >= 175) | |
(food-amount > 500) | |
(gold-amount > 400) | |
=> | |
(set-goal increase-town-size-goal monastery) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(goal increase-town-size-goal 0) | |
(current-age >= castle-age) | |
(up-compare-goal increase-town-size-goal != monastery) | |
(building-type-count-total siege-workshop > 0) | |
(building-type-count-total monastery == 0) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal monastery) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#load-if-not-defined WONDER-RACE | |
(defrule | |
(building-type-count-total town-center == 0); rebuild tc and no stone => get a market and buy some. | |
(stone-amount < 100) | |
(building-type-count-total market == 0) | |
(dropsite-min-distance wood < 10) | |
(can-afford-building market) | |
(building-available market) | |
=> | |
(set-goal increase-town-size-goal market) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(or (or (building-type-count-total town-center >= tc-level-four) | |
(strategic-number sn-resource-control == sling)) | |
(and (wood-amount > 430) | |
(or (building-type-count-total town-center >= tc-level-three) | |
(wood-amount > 1000)))) | |
(goal save-wood-goal 0) | |
(building-type-count-total market == 0) | |
(can-afford-building market) | |
(building-available market) | |
=> | |
(set-goal increase-town-size-goal market) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(current-age >= castle-age) | |
(or (and (unit-type-count villager > 60) | |
(or (goal strategy-goal boom) | |
(player-in-game any-ally))) | |
(and (research-available imperial-age) | |
(goal strategy-goal fast-imp))) | |
(building-type-count-total market == 0) | |
(can-afford-building market) | |
=> | |
(set-goal increase-town-size-goal market) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-not-defined POPULATION-CAP-25 | |
#load-if-not-defined POPULATION-CAP-50 | |
#load-if-not-defined SMALL-MAP | |
#load-if-not-defined TINY-MAP | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count town-center > 0) | |
(wood-amount > 400) | |
(or (game-time > market-time) | |
(building-type-count-total town-center > 4)) | |
(player-in-game any-ally) | |
(players-building-type-count any-ally market > 0) | |
(building-type-count-total market < number-markets) | |
(can-build market) | |
=> | |
(build market) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-not-defined AZTEC-CIV | |
#load-if-not-defined INCAN-CIV | |
#load-if-not-defined MAYAN-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal strategy-goal flush) | |
(up-research-status c: ri-bloodlines >= research-available) | |
(strategic-number sn-current-age >= fc-transit) | |
(game-time < 1560); don't build them too late e.g. after slinging | |
(building-type-count-total stable < 1) | |
(wood-amount >= 245) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(or | |
(goal strategy-goal flush) | |
(goal unit-goal mix) | |
) | |
(building-type-count-total archery-range > 0) | |
(or | |
(or | |
(goal unit-goal scout-cavalry) | |
(goal monk-threat-goal 1) | |
) | |
(and | |
(goal strategy-goal mix) | |
(strategic-number sn-current-age >= fc-transit) | |
) | |
) | |
(building-type-count-total stable < 1) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-defined BRITON-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(research-available ri-man-at-arms) | |
(players-unit-type-count every-enemy skirmisher-line > 24) | |
(or | |
(and | |
(building-type-count-total town-center >= tc-level-three) | |
(building-type-count-total stable < 1) | |
) | |
(unit-type-count-total villager > 90) | |
) | |
(building-type-count-total stable < 2) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal unit-goal archer) | |
(building-type-count-total stable < 1) | |
(building-type-count-total archery-range > 2) | |
(research-available ri-man-at-arms) | |
(players-civ focus-player aztec) | |
(or | |
(goal enemy-goal eagle-warrior) | |
(or | |
(players-building-type-count focus-player market > 0) | |
(players-building-type-count focus-player barracks > 1) | |
) | |
) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-defined CHINESE-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal unit-goal my-unique-unit-line) | |
(building-type-count-total town-center >= tc-level-four) | |
(unit-type-count-total villager > 90) | |
(building-type-count-total stable < 2) | |
(wood-amount >= 175) | |
(food-amount > 600) | |
(gold-amount < 75) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#load-if-not-defined BYZANTINE-CIV | |
#load-if-not-defined KOREAN-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(or | |
(or | |
(or | |
(unit-type-count-total cavalry-unit-class > 11) | |
(unit-type-count-total cavalry-archer-class > 11) | |
) | |
(unit-type-count-total conquistador-line > 11) | |
) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(wood-amount >= 175) | |
(building-type-count-total stable < 1) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#end-if | |
#load-if-defined SARACEN-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(unit-type-count-total mameluke-line > 11) | |
(building-type-count-total stable < 1) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
(defrule | |
(goal increase-town-size-goal 0) | |
(up-research-status c: ri-hussar >= research-pending) | |
(food-amount > 1200) | |
(wood-amount > 400) | |
(building-type-count-total stable < 7) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#load-if-not-defined VIKING-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal unit-goal archer) | |
(building-type-count-total archery-range > 3) | |
(building-type-count-total town-center >= tc-level-two) | |
(building-type-count-total stable < 2) | |
(research-available ri-man-at-arms) | |
(or | |
(strategic-number sn-current-age >= ci-transit) | |
(and | |
(unit-type-count villager > 50) | |
(and | |
(food-amount > 400) | |
(gold-amount < 150) | |
) | |
) | |
) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal unit-goal gunpowder-class) | |
(building-type-count-total stable < 1) | |
(building-type-count-total archery-range > 1) | |
(or | |
(and | |
(civ-selected turkish) | |
(strategic-number sn-cavalry-threat > 1); get camels vs cavalry with turks | |
) | |
(and | |
(building-type-count-total archery-range > 5) | |
(building-type-count-total university > 0) | |
) | |
) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(or | |
(building-type-count-total town-center >= tc-level-four) | |
(or | |
(goal monk-threat-goal 1) | |
(and | |
(goal meso-enemy-goal 1) | |
(or | |
(goal enemy-goal rush) | |
(goal enemy-goal eagle-warrior) | |
) | |
) | |
) | |
) | |
(building-type-count-total stable < 1) | |
(current-age >= castle-age) | |
(goal unit-goal skirmisher) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-defined INDIAN-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(building-type-count-total town-center >= tc-level-three) | |
(building-type-count-total stable < 3) | |
(up-research-status c: imperial-age >= research-available) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(goal increase-town-size-goal 0) | |
(building-type-count-total stable < 1) | |
(goal strategy-goal boom) | |
(goal monk-threat-goal 1) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(building-type-count-total stable < 2) | |
(or | |
(and | |
(building-type-count-total blacksmith > 0) | |
(up-compare-goal strategy-goal != boom) | |
) | |
(building-type-count-total stable < 1) | |
) | |
(or | |
(goal unit-goal knight) | |
(and | |
(goal unit-goal scout-cavalry) | |
(goal strategy-goal rush) | |
) | |
) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(building-type-count-total stable < 1) | |
(goal unit-goal cavalry-archer) | |
(or | |
(building-type-count-total monastery > 0) | |
(building-type-count-total town-center >= tc-level-two) | |
) | |
(building-type-count-total archery-range > 2) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal unit-goal knight) | |
(goal control-goal shot) | |
(building-type-count-total blacksmith > 0) | |
(building-type-count-total stable < 3) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(building-type-count-total university > 0) | |
(up-research-status c: ri-light-cavalry >= research-pending) | |
(or | |
(building-type-count-total stable < 3) | |
(and | |
(wood-amount > 350) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
) | |
(building-type-count-total stable < 4) | |
(wood-amount >= 225) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(building-type-count-total town-center >= tc-level-four) | |
(goal unit-goal knight) | |
(or | |
(and | |
(building-type-count-total stable < 4) | |
(strategic-number sn-military-level < 0) | |
) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(building-type-count-total stable < 6) | |
(wood-amount >= 225) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-not-defined HUN-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal unit-goal knight) | |
(goal strategy-goal boom) | |
(building-type-count town-center >= tc-level-three) | |
(or | |
(building-type-count-total stable < 2) | |
(building-type-count-total town-center >= tc-level-four) | |
) | |
(strategic-number sn-military-level < 0) | |
(goal position-goal flank) | |
(building-type-count-total stable < 4) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal strategy-goal flush) | |
(building-type-count town-center >= tc-level-two) | |
(goal unit-goal default-ranged) | |
(or | |
(or | |
(civ-selected frankish) | |
(civ-selected persian) | |
) | |
(or | |
(civ-selected spanish) | |
(civ-selected teutonic) | |
) | |
) | |
(building-type-count-total stable < 2) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(or | |
(building-type-count-total stable < 1) | |
(or | |
(building-type-count-total blacksmith > 0) | |
(current-age >= castle-age) | |
) | |
) | |
(or | |
(or | |
(building-type-count-total stable < 6) | |
(civ-selected hun) | |
) | |
(building-type-count-total siege-workshop > 0) | |
) | |
(building-type-count-total stable < number-stables) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal stable) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#end-if; NOT AZTEC | |
#end-if; NOT INCAN | |
#end-if; NOT MAYAN | |
#load-if-defined INCAN-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total archery-range < 2) | |
(building-type-count-total monastery > 0) | |
(or | |
(strategic-number sn-infantry-threat > 1) | |
(players-civ focus-player gothic) | |
) | |
(or | |
(building-type-count-total archery-range < 1) | |
(building-type-count-total siege-workshop > 0) | |
) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total barracks > 2) | |
(goal unit-goal eagle-warrior) | |
(players-unit-type-count every-enemy eagle-warrior-line < 6) | |
(strategic-number sn-cavalry-threat == 0) | |
(wood-amount > 350) | |
(food-amount > 150) | |
(gold-amount < 50) | |
(building-type-count-total archery-range < 2) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock > water-mixed) | |
(strategic-number sn-current-age >= ci-transit) | |
(building-type-count-total town-center >= tc-level-three) | |
(or | |
(building-type-count-total archery-range < 1) | |
(and | |
(building-type-count-total town-center >= tc-level-four) | |
(or | |
(up-research-status c: ri-crossbow >= research-pending) | |
(civ-selected hun) | |
) | |
) | |
) | |
(building-type-count-total archery-range < 2) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal strategy-goal flush) | |
(or | |
(goal enemy-goal flush) | |
(and | |
(current-age-time > 200) | |
(wood-amount > 270) | |
) | |
) | |
(building-type-count-total archery-range < 3) | |
(strategic-number sn-current-age == feudal) | |
(building-type-count-total blacksmith > 0) | |
(wood-amount >= 220) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal strategy-goal flush) | |
(building-type-count-total archery-range < 4) | |
(strategic-number sn-current-age == fc-transit) | |
(or | |
(strategic-number sn-military-level < 0) | |
(and | |
(players-current-age focus-player == castle-age) | |
(or | |
(players-unit-type-count focus-player archer-line > 15) | |
(players-building-type-count focus-player archery-range > 2) | |
) | |
) | |
) | |
(up-compare-goal unit-goal != knight) | |
(wood-amount >= 220) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(current-age == feudal-age) | |
(not (goal unit-goal knight)) | |
(building-type-count-total market < 1) | |
(building-type-count-total archery-range < 1) | |
(building-type-count barracks > 0) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(building-type-count-total market > 0) | |
(building-type-count-total town-center >= tc-level-three) | |
(building-type-count-total university > 0) | |
(building-type-count-total archery-range < 1) | |
(building-type-count barracks > 0) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal strategy-goal flush) | |
(building-type-count-total archery-range < 2) | |
(building-type-count-total blacksmith > 0) | |
(or | |
(strategic-number sn-archer-threat > 1) | |
(and | |
(players-building-type-count focus-player archery-range > 1) | |
(goal enemy-goal skirmisher); enemy probably going for xbow rush | |
) | |
) | |
(strategic-number sn-infantry-threat == 0) | |
(strategic-number sn-cavalry-threat == 0) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal strategy-goal flush) | |
(building-type-count barracks > 0) | |
(or | |
(and | |
(building-type-count-total archery-range < 2) | |
(and | |
(research-available ri-man-at-arms) | |
(or | |
(building-type-count-total stable == 0) | |
(strategic-number sn-current-age >= fc-transit) | |
) | |
) | |
) | |
(goal unit-goal archer) | |
) | |
(building-type-count-total archery-range < 3) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-defined UP-POCKET-POSITION | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal archer) | |
(building-type-count-total archery-range == 2) | |
(building-type-count-total town-center < tc-level-three) | |
=> | |
(up-jump-rule 1) | |
) | |
#end-if | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total blacksmith > 0) | |
(or | |
(goal strategy-goal rush) | |
(goal strategy-goal flush) | |
) | |
(building-type-count-total archery-range < 4) | |
(or | |
(building-type-count-total archery-range < 3) | |
(or | |
(building-type-count-total town-center >= tc-level-three) | |
(unit-type-count-total battering-ram-line > 0) | |
) | |
) | |
(goal unit-goal archer) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(or | |
(goal unit-goal archer) | |
(goal unit-goal cavalry-archer) | |
) | |
(goal strategy-goal boom) | |
(building-type-count-total town-center >= tc-level-three) | |
(or | |
(building-type-count-total archery-range < 3) | |
(building-type-count-total town-center >= tc-level-four) | |
) | |
(building-type-count-total archery-range < 5) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-defined VIKING-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal unit-goal archer) | |
(goal strategy-goal boom) | |
(building-type-count-total town-center >= 3) | |
(or | |
(research-available imperial-age) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(building-type-count-total archery-range < 8) | |
(civilian-population > 80) | |
(wood-amount >= 220) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-current-age >= ci-transit) | |
(goal unit-goal gunpowder-class) | |
(or | |
(building-type-count-total archery-range < 2) | |
(or | |
(building-type-count-total town-center >= 2) | |
(civilian-population > 80) | |
) | |
) | |
(or | |
(building-type-count-total archery-range < 4) | |
(civilian-population > 100) | |
) | |
(building-type-count-total archery-range < 8) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-defined UP-POCKET-POSITION | |
(defrule | |
(building-type-count-total town-center < tc-level-five) | |
(or | |
(building-type-count-total archery-range < 4) | |
(building-type-count-total town-center < tc-level-three) | |
) | |
(or | |
(goal nr-map-goal 1) | |
(building-type-count stone-wall-line > 10) | |
) | |
=> | |
(up-jump-rule 2) | |
) | |
#end-if | |
(defrule | |
(or | |
(goal increase-town-size-goal 0) | |
(goal increase-town-size-goal monastery) | |
) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total town-center >= 1) | |
(building-type-count-total archery-range < 2) | |
(strategic-number sn-archer-threat >= 1) | |
(strategic-number sn-military-level < 0) | |
(goal unit-goal skirmisher) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-defined BYZANTINE-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total town-center >= tc-level-two) | |
(or | |
(building-type-count-total archery-range < 2) | |
(and | |
(building-type-count-total town-center >= 3) | |
(strategic-number sn-cavalry-threat < 2) | |
) | |
) | |
(or | |
(strategic-number sn-cavalry-threat < 1) | |
(building-type-count-total barracks > 1) | |
) | |
(building-type-count-total archery-range < 4) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#else | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total town-center >= tc-level-two) | |
(building-type-count-total archery-range < 2) | |
(or | |
(strategic-number sn-cavalry-threat < 1) | |
(building-type-count-total barracks > 1) | |
) | |
(or | |
(goal unit-goal skirmisher) | |
(goal unit-goal mix) | |
) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#load-if-not-defined CELTIC-CIV | |
#load-if-not-defined SLAVIC-CIV | |
#load-if-not-defined BRITON-CIV | |
#load-if-not-defined BYZANTINE-CIV | |
#load-if-not-defined HUN-CIV | |
#load-if-not-defined VIKING-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal unit-goal knight) | |
(goal strategy-goal rush) | |
(strategic-number sn-archer-threat > 1) | |
(building-type-count-total town-center < tc-level-three) | |
(building-type-count-total siege-workshop > 0) | |
(unit-type-count mangonel-line == 0) | |
(current-age >= castle-age) | |
=> | |
(up-jump-rule 3) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal unit-goal knight) | |
(goal strategy-goal rush) | |
(building-type-count-total town-center >= tc-level-two) | |
(building-type-count siege-workshop == 0) | |
(current-age >= castle-age) | |
(goal anti-cavalry-threat-goal 0) | |
=> | |
(up-jump-rule 2) | |
) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal unit-goal knight) | |
(goal strategy-goal rush) | |
(or | |
(building-type-count-total town-center >= tc-level-three) | |
(goal enemy-goal eagle-warrior); he will come with pikes | |
) | |
(or | |
(up-research-status c: ri-crossbow >= research-pending) | |
(building-type-count-total archery-range < 1) | |
) | |
(building-type-count-total archery-range < 2) | |
(wood-amount >= 175) | |
(current-age >= castle-age) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal unit-goal knight) | |
(building-type-count-total town-center >= tc-level-two) | |
(or | |
(or | |
(goal anti-cavalry-threat-goal 1) | |
(strategic-number sn-archer-threat > 1) | |
) | |
(or | |
(goal enemy-goal flush) | |
(goal enemy-goal skirmisher) | |
) | |
) | |
(up-compare-goal position-goal == flank) | |
(building-type-count-total archery-range < 1) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-defined UP-1-PLAYER-TEAM | |
(defrule | |
(goal increase-town-size-goal 0) | |
(goal unit-goal knight) | |
(players-unit-type-count focus-player spearman-line > 6) | |
(building-type-count-total archery-range < 1) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-defined MAYAN-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(or | |
(goal strategy-goal flush) | |
(and | |
(building-type-count-total monastery > 0) | |
(goal unit-goal archer) | |
) | |
) | |
(players-civ every-enemy gothic) | |
(strategic-number sn-current-age >= fc-transit) | |
(building-type-count-total archery-range < 4) | |
(wood-amount >= 175) | |
=> | |
(set-goal control-goal aggressive-rush) | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(goal increase-town-size-goal 0) | |
(building-type-count-total blacksmith > 0) | |
(or | |
(building-type-count-total stable > 0) | |
(building-type-count-total archery-range < 3) | |
) | |
(or | |
(building-type-count-total siege-workshop > 0) | |
(building-type-count-total archery-range < 4) | |
) | |
(building-type-count-total archery-range < 6) | |
(or | |
(goal unit-goal cavalry-archer) | |
(goal strategy-goal flush) | |
) | |
(goal control-goal aggressive-rush) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal unit-goal knight) | |
(goal strategy-goal rush) | |
(or | |
(not (civ-selected celtic)) | |
(up-research-status c: ri-elite-skirmisher >= research-pending) | |
) | |
(building-type-count-total town-center >= tc-level-five) | |
(building-type-count-total archery-range < 4) | |
(not (goal control-goal my-unique-unit-line)) | |
(wood-amount >= 225) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-not-defined POPULATION-CAP-25 | |
#load-if-not-defined POPULATION-CAP-50 | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total university > 0) | |
(building-type-count-total siege-workshop > 0) | |
(up-research-status c: ri-elite-skirmisher >= research-pending) | |
(wood-amount > 360); excess wood | |
(or | |
(building-type-count-total archery-range < 6) | |
(wood-amount > 600) | |
) | |
(building-type-count-total archery-range < 8) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(goal increase-town-size-goal archery-range) | |
(nor | |
(goal ranged-unit-type-goal archer) | |
(goal ranged-unit-type-goal cavalry-archer) | |
) | |
(wood-amount < 800) | |
(building-type-count-total archery-range > 3) | |
(strategic-number sn-archer-threat < 3) | |
=> | |
(set-goal increase-town-size-goal 0) | |
) | |
(defrule | |
(goal increase-town-size-goal archery-range) | |
(goal unit-goal eagle-warrior) | |
(goal control-goal shot) | |
(building-type-count-total town-center < tc-level-three) | |
(building-type-count-total barracks < 6) | |
(current-age >= castle-age) | |
=> | |
(set-goal increase-town-size-goal 0) | |
) | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(game-time > 60) | |
(or | |
(building-type-count-total archery-range < 1) | |
(building-type-count-total blacksmith > 0) | |
) | |
(or | |
(or | |
(building-type-count-total archery-range < 4) | |
(civ-selected hun) | |
) | |
(building-type-count-total university > 0) | |
) | |
(building-type-count-total archery-range < number-archery-ranges) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal archery-range) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(or | |
(or | |
(building-type-count barracks == 0); prerequisites missing | |
(current-age == dark-age) | |
) | |
(goal save-wood-goal 1) | |
) | |
(or | |
(goal increase-town-size-goal archery-range) | |
(goal increase-town-size-goal stable) | |
) | |
=> | |
(set-goal increase-town-size-goal 0) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-current-age >= df-transit) | |
(building-type-count-total barracks < 1) | |
(building-type-count town-center > 0) | |
(goal strategy-goal flush) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal barracks) | |
(goal enemy-boats-goal 1) | |
(goal strategy-goal flush) | |
(strategic-number sn-current-age >= df-transit) | |
(building-type-count-total dock < 2) | |
(players-building-type-count every-enemy barracks == 0) | |
(players-building-type-count every-enemy archery-range == 0) | |
(players-building-type-count every-enemy stable == 0) | |
=> | |
(set-goal increase-town-size-goal 0); skip barracks for more boats | |
(disable-timer increase-town-size-timer) | |
) | |
#load-if-not-defined SARACEN-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-current-age >= df-transit) | |
(building-type-count-total barracks < 1) | |
(building-type-count town-center > 0) | |
(goal strategy-goal rush) | |
(nor (goal unit-goal monk) | |
(or (goal unit-goal eagle-warrior) | |
(goal unit-goal my-unique-unit-line))) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#load-if-not-defined UP-POCKET-POSITION | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total barracks < 1) | |
(building-type-count town-center > 0) | |
(goal unit-goal monk) | |
(or (or (goal anti-monk-threat-goal 1) | |
(strategic-number sn-cavalry-threat > 1)) | |
(building-type-count town-center >= tc-level-three)) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-not-defined TURKISH-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-current-age >= df-transit) | |
(building-type-count-total barracks < 1) | |
(building-type-count town-center > 0) | |
(goal strategy-goal boom) | |
(or (nor (goal unit-goal my-unique-unit-line) | |
(goal unit-goal scorpion)) | |
(or (strategic-number sn-cavalry-threat > 1) | |
(goal monk-threat-goal 1))) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#else | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-current-age >= df-transit) | |
(building-type-count-total barracks < 1) | |
(building-type-count town-center > 0) | |
(goal strategy-goal boom) | |
(or (nor (goal unit-goal my-unique-unit-line) | |
(goal unit-goal scorpion)) | |
(goal monk-threat-goal 1)) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#else | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total barracks < 1) | |
(building-type-count town-center > 0) | |
(goal unit-goal monk) | |
(or (goal anti-monk-threat-goal 1) | |
(building-type-count town-center >= tc-level-three)) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total town-center < tc-level-four) | |
(building-type-count-total barracks > 0) | |
(goal unit-goal knight) | |
(goal strategy-goal boom) | |
=> | |
(up-jump-rule 12) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total town-center < tc-level-four) | |
(goal unit-goal my-unique-unit-line) | |
(goal strategy-goal boom) | |
(or (or (or (civ-selected mongol) | |
(civ-selected saracen)) | |
(civ-selected spanish)) | |
(or (civ-selected italian) | |
(civ-selected teutonic))) | |
=> | |
(up-jump-rule 11) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-current-age >= df-transit) | |
(building-type-count-total barracks < 1) | |
(or (goal unit-goal my-unique-unit-line) | |
(goal unit-goal scorpion)) | |
(strategic-number sn-cavalry-threat > 1) | |
(building-type-count-total town-center >= tc-level-two) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-current-age >= df-transit) | |
(building-type-count-total barracks < 1) | |
(building-type-count town-center > 0) | |
(goal strategy-goal boom) | |
(up-compare-goal unit-goal != my-unique-unit-line) | |
(up-compare-goal unit-goal != scorpion) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total barracks < 3) | |
(building-type-count-total blacksmith > 0) | |
(building-type-count town-center > 0) | |
(or (goal strategy-goal boom) | |
(goal strategy-goal fast-imp)) | |
(or (building-type-count-total barracks < 2) | |
(building-type-count-total siege-workshop > 0)) | |
(goal unit-goal eagle-warrior) | |
(strategic-number sn-military-level < 0) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-current-age >= ci-transit) | |
(building-type-count-total barracks < 1) | |
(building-type-count town-center > 0) | |
(or (goal strategy-goal fast-imp) | |
(goal unit-goal my-unique-unit-line)) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-defined SARACEN-CIV | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total barracks < 1) | |
(building-type-count-total blacksmith > 0) | |
(building-type-count town-center > 0) | |
(goal strategy-goal rush) | |
(up-compare-goal unit-goal != monk) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#load-if-not-defined POPULATION-CAP-25 | |
#load-if-not-defined POPULATION-CAP-50 | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock > water-mixed) | |
(building-type-count-total town-center >= tc-level-three) | |
(building-type-count-total blacksmith > 0) | |
(building-type-count-total market > 0) | |
(or (building-type-count-total barracks < 1) | |
(and (building-type-count-total town-center >= tc-level-four) | |
(or (up-research-status c: ri-long-swordsman >= research-pending) | |
(unit-available eagle-warrior-line)))) | |
(building-type-count-total barracks < 3) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total monastery > 0) | |
(building-type-count-total town-center >= tc-level-two) | |
(strategic-number sn-cavalry-threat > 0) | |
(or (building-type-count-total barracks < 2) | |
(and (building-type-count-total town-center >= tc-level-four) | |
(up-research-status c: ri-pikeman >= research-pending))) | |
(building-type-count-total barracks < 4) | |
(goal unit-goal skirmisher) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or (building-type-count-total town-center >= tc-level-three) | |
(building-type-count-total barracks < 2)) | |
(strategic-number sn-cavalry-threat > 1) | |
(building-type-count-total town-center >= tc-level-two) | |
(building-type-count-total barracks < 3) | |
(up-research-status c: ri-pikeman >= research-pending) | |
(goal strategy-goal rush) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or (building-type-count-total town-center >= tc-level-four) | |
(building-type-count-total barracks < 2)) | |
(building-type-count-total town-center >= tc-level-three) | |
(building-type-count-total blacksmith > 0) | |
(building-type-count-total barracks < 3) | |
(up-research-status c: ri-pikeman >= research-pending) | |
(goal strategy-goal boom) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal increase-town-size-goal 0) | |
(building-type-count-total blacksmith > 0) | |
(building-type-count-total barracks < 4) | |
(or (goal unit-goal eagle-warrior) | |
(up-research-status c: ri-halberdier >= research-pending)) | |
(or (building-type-count-total town-center >= tc-level-three) | |
(building-type-count-total barracks < 3)) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal increase-town-size-goal 0) | |
(building-type-count-total barracks < 10) | |
(strategic-number sn-current-age >= ci-transit) | |
(building-type-count-total town-center >= tc-level-three) | |
(or (building-type-count-total barracks < 6) | |
(wood-amount > 400)) | |
(wood-amount > 220) | |
(or (goal unit-goal eagle-warrior) | |
(up-research-status c: ri-halberdier >= research-pending)) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal barracks) | |
(goal strategy-goal boom) | |
(goal unit-goal eagle-warrior) | |
(or (building-type-count-total barracks > 0) | |
(strategic-number sn-current-age < fc-transit)) | |
(nand (building-type-count-total barracks < 2) | |
(building-type-count-total town-center >= tc-level-three)) | |
=> | |
(set-goal increase-town-size-goal 0) | |
(disable-timer increase-town-size-timer) | |
) | |
(defrule | |
(goal increase-town-size-goal barracks) | |
(goal strategy-goal fast-imp) | |
(building-type-count-total barracks > 0) | |
(not (research-available imperial-age)) | |
=> | |
(set-goal increase-town-size-goal 0) | |
(disable-timer increase-town-size-timer) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count-total blacksmith > 0) | |
(building-type-count-total barracks < 4) | |
(goal unit-goal eagle-warrior) | |
(goal strategy-goal rush) | |
(or (building-type-count-total monastery > 0) | |
(goal control-goal aggressive-rush)) | |
(nand (building-type-count-total siege-workshop == 0) | |
(building-type-count-total stone-wall-line > 10)) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal increase-town-size-goal 0) | |
(goal strategy-goal flush) | |
(goal unit-goal militiaman-line) | |
(or (and (goal enemy-goal eagle-warrior) | |
(current-age == feudal-age)) | |
(and (up-research-status c: ri-elite-skirmisher >= research-pending) | |
(building-type-count-total town-center >= tc-level-two))) | |
(building-type-count-total barracks < 2) | |
(building-type-count-total blacksmith > 0) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal increase-town-size-goal 0) | |
(goal strategy-goal rush) | |
(goal unit-goal militiaman-line) | |
(building-type-count-total barracks < 2) | |
(building-type-count-total blacksmith > 0) | |
(up-research-status c: ri-double-bit-axe >= research-pending) | |
(up-research-status c: ri-horse-collar >= research-pending) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or (or (goal unit-goal militiaman-line) | |
(goal control-goal militiaman-line)) | |
(up-research-status c: ri-pikeman >= research-pending)) | |
(building-type-count-total barracks < 8) | |
(building-type-count-total university > 0) | |
(building-type-count-total siege-workshop > 0) | |
(wood-amount > 420) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal increase-town-size-goal 0) | |
(or (and (goal strategy-goal flush) | |
(strategic-number sn-cavalry-threat > 1)) | |
(and (population-cap < 75) | |
(up-research-status c: ri-pikeman >= research-pending))) | |
(building-type-count-total barracks < 2) | |
(building-type-count-total blacksmith > 0) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-defined DARK-AGE-START | |
#load-if-not-defined UP-POCKET-POSITION | |
(defrule | |
(players-building-type-count focus-player barracks > 0) | |
(game-time < 490) | |
(building-type-count-total barracks < 1) | |
(up-pending-objects c: barracks == 0) | |
(can-build barracks) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
#end-if | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(or (building-type-count-total barracks < 1) | |
(or (or (building-type-count-total lumber-camp > 0) | |
(building-type-count-total mill > 0)) | |
(building-type-count-total blacksmith > 0))) | |
(or (building-type-count-total barracks < 5) | |
(building-type-count-total siege-workshop > 0)) | |
(building-type-count-total barracks < number-barracks) | |
(wood-amount >= 175) | |
=> | |
(set-goal increase-town-size-goal barracks) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(or (goal increase-town-size-goal siege-workshop) | |
(or (or (goal increase-town-size-goal barracks) | |
(goal increase-town-size-goal archery-range)) | |
(goal increase-town-size-goal stable))) | |
(building-type-count-total town-center == 0) | |
=> | |
(set-goal increase-town-size-goal 0) | |
) | |
(defrule | |
(wood-amount < 200) | |
(or (goal increase-town-size-goal siege-workshop) | |
(and (wood-amount < 175) | |
(or (or (goal increase-town-size-goal barracks) | |
(goal increase-town-size-goal archery-range)) | |
(goal increase-town-size-goal stable)))) | |
=> | |
(set-goal increase-town-size-goal 0) | |
(chat-local-to-self "Not enough wood to build.") | |
) | |
(defrule; don't build if we want to save wood | |
(or (strategic-number sn-resource-control == 3); hand-cart upgrade | |
(or (and (strategic-number sn-resource-control == ri-elite-skirmisher) | |
(building-type-count archery-range > 0)) | |
(and (or (strategic-number sn-resource-control == battering-ram) | |
(goal save-wood-goal 1)) | |
(building-type-count siege-workshop > 0)))) | |
=> | |
(set-goal increase-town-size-goal 0) | |
) | |
#end-if; NOT WONDER-RACE | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-current-age == feudal) | |
(or (building-type-count-total barracks == 0); no rax => market+bs start | |
(or (and (goal strategy-goal rush); fail save for maps with a rax at start | |
(civ-selected saracen)); use saracen market advantage | |
(or (goal strategy-goal sling) | |
(strategic-number sn-resource-control == sling)))) | |
(building-type-count-total market < 1) | |
(can-afford-building market) | |
=> | |
(set-goal increase-town-size-goal market) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-current-age <= feudal) | |
(current-age-time >= 10) | |
(building-type-count-total blacksmith >= 1) | |
(wood-amount >= 200) | |
(or (food-amount < 800) | |
(or (gold-amount < 200) | |
(wood-amount >= 400))) | |
(building-type-count-total market < 1) | |
(can-afford-building market) | |
=> | |
(set-goal increase-town-size-goal market) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal market) | |
(or (or (building-type-count-total market > 0) | |
(or (and (wood-amount < 100) | |
(civ-selected saracen)) | |
(wood-amount < 175))) | |
(or (or (strategic-number sn-current-age == fc-transit) | |
(strategic-number sn-resource-control == 3)) | |
(strategic-number sn-resource-control == ri-elite-skirmisher))) | |
=> | |
(set-goal increase-town-size-goal 0) | |
) | |
(defrule | |
(or (building-type-count-total town-center <= 0) | |
(or (current-age <= feudal-age) | |
(building-type-count-total blacksmith >= number-blacksmiths))) | |
(or (building-type-count-total town-center <= 0) | |
(building-type-count-total blacksmith >= 1)); at least one | |
=> | |
(up-jump-rule 4)) ; temporary(?) debug rule | |
(defrule | |
(up-compare-goal strategy-goal != flush) | |
(goal increase-town-size-goal 0) | |
(food-amount > 300) | |
(nand (goal strategy-goal sling) | |
(current-age-time < 600)) | |
(building-type-count town-center > 0) | |
(or (building-type-count-total stable > 0) | |
(or (building-type-count-total archery-range > 0) | |
(building-type-count-total market > 0))) | |
(building-type-count-total blacksmith < number-blacksmiths) | |
(can-afford-building blacksmith) | |
=> | |
(enable-timer increase-town-size-timer 4) | |
(set-goal increase-town-size-goal blacksmith)) | |
(defrule | |
(wood-amount > 200) | |
(goal strategy-goal flush) | |
(goal increase-town-size-goal 0) | |
(or (and (building-type-count-total archery-range > 0) | |
(or (building-type-count-total stable > 0) | |
(up-research-status c: ri-man-at-arms >= research-pending))) | |
(building-type-count-total archery-range > 1)) | |
(building-type-count-total mining-camp > 0) | |
(building-type-count-total blacksmith < 1) | |
(can-afford-building blacksmith) | |
=> | |
(enable-timer increase-town-size-timer 4) | |
(set-goal increase-town-size-goal blacksmith)) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-current-age == feudal) | |
(or (food-amount > 600) | |
(gold-amount > 400)) | |
(or (gold-amount > 100) | |
(food-amount > 1000)) | |
(building-type-count town-center > 0) | |
(or (building-type-count-total stable > 0) | |
(or (building-type-count-total archery-range > 0) | |
(building-type-count-total market > 0))) | |
(building-type-count-total blacksmith < 1) | |
(can-afford-building blacksmith) | |
=> | |
(enable-timer increase-town-size-timer 4) | |
(set-goal increase-town-size-goal blacksmith)) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(strategic-number sn-current-age == feudal) | |
(wood-amount >= 325) | |
(building-type-count town-center > 0) | |
(or (building-type-count-total stable > 0) | |
(or (building-type-count-total archery-range > 0) | |
(building-type-count-total market > 0))) | |
(building-type-count-total blacksmith < 1) | |
(can-afford-building blacksmith) | |
=> | |
(enable-timer increase-town-size-timer 4) | |
(set-goal increase-town-size-goal blacksmith)) | |
(defrule | |
(goal increase-town-size-goal blacksmith) | |
(can-build blacksmith) | |
=> | |
(build blacksmith) | |
(set-goal increase-town-size-goal 2) | |
) | |
#end-if | |
(defrule | |
(or (goal increase-town-size-goal market) | |
(goal increase-town-size-goal barracks)) | |
(goal save-wood-goal 1) | |
=> | |
(set-goal increase-town-size-goal 0) | |
) | |
#load-if-not-defined BLACK-FOREST-MAP | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
#load-if-not-defined DIFFICULTY-MODERATE | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(strategic-number sn-maximum-town-size >= 60) | |
(goal unit-goal archer) | |
(or (civ-selected viking) | |
(civ-selected japanese)) | |
(or (wood-amount > 700) | |
(goal increase-town-size-goal archery-range)) | |
(building-type-count-total archery-range < 12) | |
(building-type-count-total archery-range > 3) | |
(can-build archery-range) | |
=> | |
(build-forward archery-range) | |
) | |
#load-if-not-defined BYZANTINE-CIV | |
#load-if-not-defined CELTIC-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(strategic-number sn-maximum-town-size >= 60) | |
(or | |
(up-research-status c: ri-paladin >= research-pending) | |
(up-research-status c: ri-heavy-camel >= research-pending) | |
) | |
(gold-amount > 500) | |
(wood-amount > 1300) | |
(building-type-count-total stable < 15) | |
(building-type-count-total stable > 3) | |
(can-build stable) | |
=> | |
(build-forward stable) | |
) | |
#end-if | |
#end-if | |
#load-if-defined GOTHIC-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(strategic-number sn-maximum-town-size >= 60) | |
(or (up-research-status c: ri-champion >= research-pending) | |
(up-research-status c: ri-anarchy >= research-pending)) | |
(or (wood-amount > 700) | |
(goal increase-town-size-goal barracks)) | |
(building-type-count-total barracks < 15) | |
(building-type-count-total barracks > 5) | |
(can-build barracks) | |
=> | |
(build-forward barracks) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(strategic-number sn-maximum-town-size >= 60) | |
(up-research-status c: ri-heavy-scorpion >= research-pending) | |
(gold-amount > 500) | |
(wood-amount > 600) | |
(building-type-count-total siege-workshop < 5) | |
(can-build siege-workshop) | |
=> | |
(build-forward siege-workshop) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(building-type-count-total monastery == 0) | |
(goal increase-town-size-goal monastery) | |
(can-build monastery) | |
=> | |
(build monastery) | |
(set-goal increase-town-size-goal 2) | |
) | |
(defrule | |
(goal increase-town-size-goal market) | |
(building-type-count-total market < 1) | |
(can-build-with-escrow market) | |
=> | |
(release-escrow wood) | |
(build market) | |
(set-goal increase-town-size-goal 2) | |
) | |
(defrule | |
(goal increase-town-size-goal stable) | |
(can-build stable) | |
=> | |
(build stable) | |
(set-goal increase-town-size-goal 2) | |
) | |
(defrule | |
(goal increase-town-size-goal barracks) | |
(can-build barracks) | |
=> | |
(build barracks) | |
(set-goal increase-town-size-goal 2) | |
) | |
(defrule | |
(goal increase-town-size-goal archery-range) | |
(can-build archery-range) | |
=> | |
(build archery-range) | |
(set-goal increase-town-size-goal 2) | |
) | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(game-time > 60) | |
=> | |
(set-strategic-number sn-maximum-town-size 12) | |
(disable-self) | |
) | |
(defrule | |
(game-time > 120) | |
=> | |
(set-strategic-number sn-maximum-town-size 14) | |
(disable-self) | |
) | |
#load-if-not-defined FEUDAL-AGE-START | |
(defrule | |
(current-age == feudal-age) | |
(current-age-time > 20) | |
=> | |
(set-strategic-number sn-maximum-town-size 14) | |
) | |
(defrule | |
(current-age == feudal-age) | |
(current-age-time > 90) | |
=> | |
(set-strategic-number sn-maximum-town-size 16) | |
) | |
(defrule | |
(current-age == feudal-age) | |
(current-age-time > 180) | |
=> | |
(set-strategic-number sn-maximum-town-size 20) | |
) | |
#end-if | |
#end-if | |
#else | |
(defrule | |
(game-time < 90) | |
=> | |
(set-strategic-number sn-maximum-town-size 8) | |
(set-strategic-number sn-percent-building-cancellation 5)(disable-self) | |
) | |
(defrule | |
(game-time > 90) | |
=> | |
(set-strategic-number sn-maximum-town-size 12) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-maximum-wood-drop-distance 30) | |
(set-strategic-number sn-maximum-food-drop-distance 15) | |
(set-strategic-number sn-maximum-hunt-drop-distance 24) | |
(set-strategic-number sn-gold-gatherer-percentage 100) | |
(set-strategic-number sn-cap-civilian-builders 100) | |
(set-strategic-number sn-cap-civilian-gatherers 100)(disable-self) | |
) | |
(defrule | |
(game-time > 120) | |
=> | |
(set-strategic-number sn-maximum-town-size 15)(disable-self) | |
) | |
(defrule | |
(game-time > 180) | |
=> | |
(set-strategic-number sn-maximum-town-size 18)(disable-self) | |
) | |
(defrule | |
(game-time > 240) | |
=> | |
(set-strategic-number sn-maximum-town-size 22) | |
(set-strategic-number sn-camp-max-distance 50)(disable-self) | |
) | |
(defrule | |
(game-time > 300) | |
(strategic-number sn-maximum-town-size < 26) | |
=> | |
(set-strategic-number sn-maximum-town-size 26) | |
(set-strategic-number sn-percent-building-cancellation 75)(disable-self) | |
) | |
(defrule | |
(game-time > 480) | |
(strategic-number sn-maximum-town-size < 30) | |
=> | |
(set-strategic-number sn-maximum-town-size 30)(disable-self) | |
) | |
#end-if | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(current-age == castle-age) | |
(building-type-count-total town-center < tc-level-five) | |
(or | |
(goal unit-goal my-unique-unit-line) | |
(goal unit-goal knight) | |
) | |
=> | |
(up-jump-rule 1) | |
) | |
(defrule | |
(current-age >= castle-age) | |
(or | |
(building-type-count-total town-center >= tc-level-four) | |
(unit-type-count-total villager >= max-civ) | |
) | |
(can-afford-building university) | |
(building-type-count-total university == 0) | |
(goal increase-town-size-goal 0) | |
=> | |
(set-goal increase-town-size-goal university) | |
(enable-timer increase-town-size-timer 4) | |
) | |
(defrule | |
(goal increase-town-size-goal 0) | |
(current-age >= castle-age) | |
(building-type-count-total town-center > 0) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(building-type-count-total monastery > 0) | |
(building-type-count-total university == 0) | |
(wood-amount >= 200) | |
(food-amount > 500) | |
(gold-amount > 400) | |
=> | |
(set-goal increase-town-size-goal university) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#load-if-not-defined TURKISH-CIV | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
(goal unit-goal gunpowder-class) | |
(can-afford-building university) | |
(building-type-count-total university == 0) | |
(goal increase-town-size-goal 0) | |
=> | |
(set-goal increase-town-size-goal university) | |
(enable-timer increase-town-size-timer 4) | |
) | |
#end-if | |
(defrule | |
(or | |
(or | |
(building-type-count-total university > 0) | |
(wood-amount < 200) | |
) | |
(or | |
(up-compare-goal save-wood-goal != 0) | |
(and | |
(goal strategy-goal boom) | |
(and | |
(building-type-count-total town-center < tc-level-five) | |
(or | |
(food-amount < 600) | |
(gold-amount < 500) | |
) | |
) | |
) | |
) | |
) | |
(goal increase-town-size-goal university) | |
=> | |
(set-goal increase-town-size-goal 0) | |
) | |
(defrule | |
(goal increase-town-size-goal university) | |
(building-type-count-total university < 1) | |
(can-build university) | |
=> | |
(build university) | |
(set-goal increase-town-size-goal 2) | |
) | |
#else | |
(defrule | |
(up-pending-objects c: dock < 6) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(building-type-count-total dock < 12) | |
(can-build dock) | |
=> | |
(build dock) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(not (can-build dock)) | |
(unit-type-count eagle-warrior-line > 0) | |
(building-type-count-total barracks == 0) | |
(can-build barracks) | |
=> | |
(build barracks) | |
(set-strategic-number sn-number-explore-groups 3) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(not (can-build dock)) | |
(building-type-count-total stable == 0) | |
(can-build stable) | |
=> | |
(build stable) | |
(set-strategic-number sn-number-explore-groups 3) | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(unit-type-count villager > villager-siege-workshop) | |
(building-type-count-total siege-workshop < 1) | |
(can-build siege-workshop) | |
=> | |
(build siege-workshop) | |
) | |
(defrule | |
(or | |
(and | |
(unit-type-count villager >= villager-monastery) | |
(or | |
(goal position-goal pocket) | |
(not (player-in-game any-ally)) | |
) | |
) | |
(or | |
(unit-type-count villager >= 18) | |
(civ-selected aztec) | |
) | |
) | |
(can-build monastery) | |
(building-type-count-total monastery < 1) | |
=> | |
(build monastery) | |
) | |
(defrule | |
(unit-type-count villager >= 13) | |
(can-build town-center) | |
(building-type-count-total town-center < 6) | |
=> | |
(build town-center) | |
) | |
(defrule | |
(or (building-type-count-total market < 1) | |
(building-type-count farm > 0)) | |
(unit-type-count villager >= villager-stable) | |
(building-type-count-total stable < number-stables) | |
(can-build stable) | |
=> | |
(build stable) | |
) | |
(defrule | |
(or (unit-type-count villager >= villager-archery-range) | |
(and (building-type-count-total market < 1) | |
(civ-selected hun))) | |
(building-type-count-total archery-range < number-archery-ranges) | |
(can-build archery-range) | |
=> | |
(build archery-range) | |
) | |
(defrule | |
(or (or (up-research-status c: ri-champion >= research-pending) | |
(civ-selected mayan)) | |
(strategic-number sn-cavalry-threat >= 1)) | |
(unit-type-count villager >= villager-barracks) | |
(building-type-count-total barracks < number-barracks) | |
(can-build barracks) | |
=> | |
(build barracks) | |
) | |
(defrule | |
(building-type-count-total market < 1) | |
(unit-type-count villager >= villager-market) | |
(can-build market) | |
=> | |
(build market) | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(or (up-research-status c: ri-heavy-scorpion >= research-pending) | |
(and (civ-selected hun) | |
(building-type-count-total siege-workshop < 2))) | |
(unit-type-count villager > villager-siege-workshop) | |
(building-type-count-total siege-workshop < 3) | |
(can-build siege-workshop) | |
=> | |
(build siege-workshop) | |
) | |
#load-if-not-defined DEFEND-WONDER | |
(defrule | |
(up-pending-objects c: mining-camp < 1) | |
(or (unit-type-count villager >= villager-mining-camp) | |
(and (unit-type-count villager >= villager-town-center) | |
(building-type-count-total mining-camp == 0))) | |
(building-type-count-total mining-camp < 6) | |
(or (resource-found gold) | |
(resource-found stone)) | |
(can-build mining-camp) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0) | |
(build mining-camp) | |
) | |
#end-if | |
#end-if ;PIDM | |
(defrule | |
(building-type-count-total town-center >= 1) | |
(or (cc-players-unit-type-count 0 gold-mine < 6) | |
(or (wood-amount >= 745) | |
(strategic-number sn-current-age >= imperial))) | |
(unit-type-count villager >= villager-stable) | |
(or (up-research-status c: ri-hand-cart >= research-pending) | |
(food-amount < 300)) | |
(building-type-count-total stable < number-stables) | |
(can-build stable) | |
=> | |
(build stable) | |
) | |
(defrule | |
(building-type-count-total town-center >= 1) | |
(or (cc-players-unit-type-count 0 gold-mine < 6) | |
(or (wood-amount >= 745) | |
(strategic-number sn-current-age >= imperial))) | |
(unit-type-count villager >= villager-archery-range) | |
(or (up-research-status c: ri-hand-cart >= research-pending) | |
(food-amount < 300)) | |
(building-type-count-total archery-range < number-archery-ranges) | |
(can-build archery-range) | |
=> | |
(build archery-range) | |
) | |
(defrule | |
(building-type-count-total town-center >= 1) | |
(or (cc-players-unit-type-count 0 gold-mine < 6) | |
(or (wood-amount >= 745) | |
(strategic-number sn-current-age >= imperial))) | |
(unit-type-count villager >= villager-barracks) | |
(or (up-research-status c: ri-hand-cart >= research-pending) | |
(food-amount < 300)) | |
(building-type-count-total barracks < number-barracks) | |
(can-build barracks) | |
=> | |
(build barracks) | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(strategic-number sn-resource-control != ri-elite-skirmisher) | |
(strategic-number sn-resource-control != battering-ram) | |
(or (dropsite-min-distance wood < wood-distance-farm); make sure we don't run out of wood | |
(wood-amount > 800)) | |
(game-time > 180) | |
(or (and (goal farm-goal 1) | |
(up-pending-objects c: farm < 2)) | |
(goal farm-goal 2)) | |
(goal save-wood-goal 0) | |
(up-pending-objects c: farm < 6) | |
(can-build farm) | |
=> | |
(build farm) | |
) | |
;********** UNITS ********** | |
#load-if-defined DIFFICULTY-EASIEST | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(strategic-number sn-resource-control == 0) | |
(or (strategic-number sn-military-level >= 2) | |
(or (population >= fourty-percent-pop) | |
(and (strategic-number sn-military-level >= 1) | |
(population >= twenty-five-percent-pop)))) | |
; test (population-cap >= 175) | |
(military-population >= 5); 25 | |
; test (strategic-number sn-military-level >= 0) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
; (chat-to-player my-player-number "Hold back resources on this difficulty level.") | |
) | |
(defrule | |
(true) | |
=> | |
(set-escrow-percentage wood 4) | |
(set-escrow-percentage food 4) | |
(set-escrow-percentage gold 4) | |
(set-escrow-percentage stone 4)) | |
#end-if | |
#load-if-defined DIFFICULTY-EASY | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(strategic-number sn-resource-control == 0) | |
(or (strategic-number sn-military-level >= 3) | |
(or (population >= sixty-percent-pop) | |
(and (strategic-number sn-military-level >= 2) | |
(population >= fourty-percent-pop)))) | |
; test (population-cap >= 175) | |
(military-population >= 15); 25 | |
; test (strategic-number sn-military-level >= 1) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
; (chat-to-player my-player-number "Hold back resources on this difficulty level.") | |
) | |
(defrule | |
(true) | |
=> | |
(set-escrow-percentage wood 2) | |
(set-escrow-percentage food 2) | |
(set-escrow-percentage gold 2) | |
(set-escrow-percentage stone 2)) | |
#end-if | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(game-time < 180) | |
(players-building-count every-enemy == 0) | |
(unit-type-count scout-cavalry-line < 3) | |
=> | |
(train scout-cavalry-line) | |
(set-strategic-number sn-number-explore-groups 5) | |
(set-strategic-number sn-minimum-explore-group-size 1) | |
) | |
#end-if | |
(defrule | |
(players-building-count every-enemy > 0) | |
=> | |
(set-strategic-number sn-number-explore-groups 1) | |
(set-strategic-number sn-total-number-explorers 1) | |
(up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
(disable-self) | |
) | |
; *** NAVY *** | |
#load-if-not-defined RIVERS-MAP | |
#load-if-not-defined BALTIC-MAP | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(can-train transport-ship) | |
(players-unit-type-count every-enemy fire-ship-line < 15) | |
(players-unit-type-count every-enemy galley-line < 15) | |
(strategic-number sn-resource-control != 2) | |
(current-age == imperial-age) | |
(unit-type-count-total transport-ship < 5) | |
(or (population >= del-civ-pop) | |
(and (warboat-count >= 30) | |
(soldier-count >= 20))) | |
=> | |
(train transport-ship) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(can-train transport-ship) | |
(or (population >= max-civ-pop) | |
(goal team-coordination-goal 1)); attacking | |
(or (population >= max-civ-pop) | |
(and (soldier-count >= 25) | |
(or (warboat-count >= 11) | |
(goal enemy-boats-goal 0)))) | |
(unit-type-count-total transport-ship < 5) | |
=> | |
(train transport-ship) | |
) | |
#end-if | |
#end-if | |
#load-if-defined KOREAN-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(can-train turtle-ship-line) | |
(or (unit-type-count turtle-ship-line < 12) | |
(can-research ri-elite-turtle-ship)) | |
=> | |
(research ri-elite-turtle-ship) | |
(train turtle-ship-line) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(can-train cannon-galleon-line) | |
(warboat-count >= 20) | |
(or (unit-type-count cannon-galleon-line < 8) | |
(warboat-count >= 50)) | |
(unit-type-count cannon-galleon-line < 16) | |
=> | |
(train cannon-galleon-line) | |
) | |
#load-if-not-defined POPULATION-CAP-25 | |
#load-if-not-defined POPULATION-CAP-50 | |
#load-if-not-defined POPULATION-CAP-75 | |
(defrule | |
(game-time < 1800) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(strategic-number sn-military-level > 0) | |
(warboat-count > 15) | |
(or (cc-players-unit-type-count 0 shore-fish >= shorefishreq2); a bit | |
(cc-players-unit-type-count 0 sea-fish >= deepfishreq2)); a bit | |
(dropsite-min-distance wood < 4) | |
(civilian-population < max-civ) | |
(population < max-civ-pop) | |
(unit-type-count fishing-ship < 16) | |
(can-train fishing-ship) | |
=> | |
(train fishing-ship) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#load-if-defined VIKING-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(can-research-with-escrow ri-elite-longboat) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-elite-longboat) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(up-research-status c: ri-elite-longboat >= research-pending) | |
(warboat-count < max-fleet) | |
(can-train longboat-line) | |
=> | |
(train longboat-line) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(strategic-number sn-resource-control < 2) | |
(or (current-age == castle-age) | |
(up-research-status c: ri-fast-fire-ship >= research-pending)) | |
(unit-type-count fire-ship-line < 24) | |
(warboat-count < max-fleet) | |
(can-train fire-ship-line) | |
=> | |
(train fire-ship-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 2) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(up-research-status c: ri-war-galley >= research-pending) | |
(warboat-count < max-fleet) | |
(can-train galley-line) | |
=> | |
(train galley-line) | |
) | |
(defrule | |
(goal position-goal flank) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(building-type-count barracks < 3) | |
(building-type-count archery-range < 1) | |
(building-type-count stable < 1) | |
(building-type-count castle < 1) | |
(building-type-count siege-workshop < 2) | |
(building-type-count monastery < 2) | |
(wood-amount < 250) | |
(players-building-type-count target-player dock < 3) | |
(strategic-number sn-current-age < ci-transit) | |
=> | |
(up-jump-rule 2) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 2) | |
(unit-type-count fire-ship-line < 6) | |
(or (current-age == castle-age) | |
(up-research-status c: ri-fast-fire-ship >= research-pending)) | |
(goal enemy-boats-goal 1) | |
(or (or (warboat-count < 15) | |
(unit-type-count fire-ship-line < 6)) | |
(and (civ-selected aztec) | |
(warboat-count < 25))) | |
(can-train fire-ship-line) | |
=> | |
(train fire-ship-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 2) | |
(or (goal strategy-goal flush) | |
(current-age > feudal-age)) | |
(nor (research-available ri-war-galley) | |
(research-available ri-galleon)) | |
(or (and (goal enemy-boats-goal 1) | |
(warboat-count < max-warships)) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands)) | |
(warboat-count < max-fleet) | |
(can-train galley-line) | |
=> | |
(train galley-line) | |
) | |
; counter units | |
#load-if-not-defined TEUTONIC-CIV | |
(defrule | |
(or (and (strategic-number sn-resource-control <= 2) | |
(or (strategic-number sn-resource-control < 1) | |
(unit-type-count scout-cavalry-line < 6))) | |
(strategic-number sn-resource-control == ri-heresy)) | |
(or (food-amount > 200) | |
(unit-type-count scout-cavalry-line < 6)) | |
(goal monk-threat-goal 1) | |
(not (research-available ri-light-cavalry)) | |
(can-train scout-cavalry-line) | |
=> | |
(train scout-cavalry-line) | |
) | |
#else | |
(defrule | |
(nand (game-time > 1800) | |
(players-unit-type-count every-enemy monk < 10)) | |
(or (and (food-amount > 200) | |
(strategic-number sn-resource-control < 2)) | |
(unit-type-count scout-cavalry-line < 6)) | |
(goal monk-threat-goal 1) | |
(can-train scout-cavalry-line) | |
=> | |
(train scout-cavalry-line) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control >= 2) | |
=> | |
(up-jump-rule 26) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal strategy-goal rush) | |
(goal unit-goal scout-cavalry) | |
(nor | |
(research-available ri-double-bit-axe) | |
(research-available ri-horse-collar) | |
) | |
(unit-type-count scout-cavalry-line < 5) | |
(can-train scout-cavalry-line) | |
=> | |
(train scout-cavalry-line) | |
) | |
#load-if-defined ITALIAN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(and | |
(unit-type-count my-unique-unit-line < 20) | |
(strategic-number sn-cavalry-threat >= 1) | |
) | |
(up-research-status c: my-unique-unit-upgrade >= research-pending) | |
) | |
(gold-amount > 100) | |
(can-train genoese-crossbowman) | |
=> | |
(train genoese-crossbowman) | |
) | |
#end-if | |
#load-if-not-defined UP-POCKET-POSITION | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal strategy-goal rush); when using fast castle strategy | |
(unit-type-count spearman-line < 4) | |
(strategic-number sn-current-age == fc-transit) | |
(players-current-age every-enemy == castle-age) | |
(players-current-age-time every-enemy >= 60); enemy at least 60s ahead of us in castle age | |
(goal enemy-goal rush); possible enemy krush | |
(goal meso-enemy-goal -1) | |
(can-train spearman-line); make spearman so enemy won't raid us with knights | |
=> | |
(train spearman-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count spearman-line < 6) | |
(current-age == feudal-age) | |
(players-unit-type-count focus-player scout-cavalry-line > 3) | |
(strategic-number sn-focus-player-number g:== closest-enemy-goal) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count spearman-line < 6) | |
(current-age == feudal-age) | |
(goal threat-source-goal 947) | |
(goal threat-target-goal villager-class) | |
(up-compare-goal threat-time-goal < 5000) | |
(players-unit-type-count focus-player scout-cavalry-line > 1) | |
(can-train spearman-line); enemy going scout flush | |
=> | |
(train spearman-line) | |
) | |
#end-if | |
#load-if-defined INDIAN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(or | |
(goal unit-goal knight) | |
(up-research-status c: ri-imperial-camel >= research-pending) | |
) | |
(unit-type-count camel-line < 12) | |
) | |
(can-train camel-line) | |
=> | |
(train camel-line) | |
) | |
#end-if | |
#load-if-not-defined SARACEN-CIV | |
#load-if-not-defined TURKISH-CIV | |
#load-if-not-defined INDIAN-CIV | |
(defconst extra-anti-cav-unit spearman-line) | |
#else | |
(defconst extra-anti-cav-unit camel-line) | |
#end-if | |
#else | |
(defconst extra-anti-cav-unit camel-line) | |
#end-if | |
#else | |
(defconst extra-anti-cav-unit camel-line) | |
#end-if | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
#load-if-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-cavalry-threat >= 1) | |
(or | |
(players-unit-type-count focus-player paladin > 0) | |
(and | |
(players-unit-type-count focus-player camel-line > 10) | |
(players-civ focus-player saracen) | |
) | |
) | |
(up-research-status c: ri-halberdier >= research-pending) | |
(unit-type-count extra-anti-cav-unit < 40) | |
(can-train extra-anti-cav-unit) | |
=> | |
(train extra-anti-cav-unit) | |
) | |
#end-if | |
#load-if-defined SARACEN-CIV | |
#load-if-defined POST-IMPERIAL-AGE-START | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(population < seventy-five-percent-pop) | |
(game-time < 480) | |
(can-train camel-line) | |
=> | |
(train camel-line) | |
) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(current-age <= castle-age) | |
(strategic-number sn-resource-control < 1) | |
(goal strategy-goal flush) | |
(building-type-count-total archery-range > 0) | |
(strategic-number sn-cavalry-threat >= 1) | |
(or | |
(current-age == feudal-age) | |
(up-research-status c: ri-pikeman >= research-pending) | |
) | |
(unit-type-count spearman-line < 20) | |
(unit-type-count camel-line < 12) | |
(unit-type-count villager > 30); or we never make it anywhere if we lose villagers to knights | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
#end-if ;NOT EASY | |
#end-if ;NOT EASIEST | |
#load-if-defined BYZANTINE-CIV | |
(defrule | |
(starting-age == post-imperial-age) | |
(game-time > 600) | |
(building-type-count castle > 0) | |
=> | |
(up-jump-rule 1) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(up-research-status c: ri-paladin >= research-pending) | |
(or | |
(or | |
(and | |
(players-unit-type-count focus-player spearman-line < 25) | |
(players-unit-type-count focus-player camel-line < 20) | |
) | |
(and | |
(civ-selected celtic) | |
(gold-amount > 2000) | |
) | |
) | |
(or | |
(strategic-number sn-archer-threat > 1) | |
(players-unit-type-count focus-player scorpion-line > 10) | |
) | |
) | |
(can-train knight-line) | |
=> | |
(train knight-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count my-unique-unit-line < 20) | |
(strategic-number sn-infantry-threat >= 1) | |
(or | |
(gold-amount > 100) | |
(up-research-status c: my-unique-unit-upgrade >= research-pending) | |
) | |
(or | |
(or | |
(civ-selected aztec) | |
(civ-selected byzantine) | |
) | |
(or | |
(civ-selected spanish) | |
(up-research-status c: ri-elite-teutonic-knight >= research-pending) | |
) | |
) | |
(can-train my-unique-unit-line) | |
=> | |
(train my-unique-unit-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(can-train my-unique-unit-line) | |
(unit-type-count my-unique-unit-line < 12) | |
(goal enemy-goal eagle-warrior) | |
(or | |
(or | |
(civ-selected aztec) | |
(civ-selected byzantine) | |
) | |
(or | |
(civ-selected japanese) | |
(civ-selected teutonic) | |
) | |
) | |
=> | |
(train my-unique-unit-line) | |
) | |
#load-if-defined INCAN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count slinger < 20) | |
(or | |
(strategic-number sn-infantry-threat > 1) | |
(goal ranged-unit-type-goal slinger) | |
) | |
(or | |
(gold-amount > 100) | |
(current-age == castle-age) | |
) | |
(can-train slinger) | |
=> | |
(train slinger) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(unit-type-count villager > 75) | |
(food-amount >= unique-unit-food) | |
) | |
(or | |
(gold-amount > 100) | |
(current-age == castle-age) | |
) | |
(or | |
(unit-type-count my-unique-unit-line < 20) | |
(or | |
(strategic-number sn-cavalry-threat > 1) | |
(unit-type-count-total archer-line > 15) | |
) | |
) | |
(can-train kamayuk) | |
=> | |
(train kamayuk) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count condottiero < 12) | |
(players-unit-type-count focus-player hand-cannoneer > 6) | |
(gold-amount > 70) | |
(or | |
(unit-type-count teutonic-knight-line > high-min-number-upgrade) | |
(civ-selected gothic) | |
) | |
(can-train condottiero) | |
=> | |
(train condottiero) | |
) | |
#load-if-defined GOTHIC-CIV | |
(defrule | |
(not (player-in-game any-ally)) | |
(up-research-status c: ri-champion >= research-pending) | |
(players-unit-type-count every-enemy teutonic-knight-line < 10) | |
(gold-amount < 500) | |
=> | |
(up-jump-rule 1) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(unit-type-count hand-cannoneer < 30) | |
(unit-type-count trade-cart > 20) | |
) | |
(or | |
(goal unit-goal gunpowder-class) | |
(and | |
(goal ranged-unit-type-goal gunpowder-class) | |
(or | |
(unit-type-count hand-cannoneer < 15) | |
(death-match-game) | |
) | |
) | |
) | |
(gold-amount > 100) | |
(can-train hand-cannoneer) | |
=> | |
(train hand-cannoneer) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count bombard-cannon < 3) | |
(goal unit-goal gunpowder-class) | |
(can-train bombard-cannon) | |
=> | |
(train bombard-cannon) | |
) | |
#load-if-not-defined TURKISH-CIV | |
(defrule | |
(up-research-status c: ri-heavy-scorpion >= research-pending) | |
(wood-amount > 300) | |
(players-unit-type-count every-enemy huskarl-line < 10) | |
(unit-type-count scorpion-line > 4) | |
=> | |
(up-jump-rule 1) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(nand | |
(or | |
(civ-selected teutonic) | |
(civ-selected byzantine) | |
) | |
(building-type-count castle > 0) | |
) | |
(unit-type-count hand-cannoneer < 20) | |
(or | |
(strategic-number sn-infantry-threat >= 1) | |
(players-unit-type-count focus-player huskarl-line > 4) | |
) | |
(gold-amount > 150) | |
(can-train hand-cannoneer) | |
=> | |
(train hand-cannoneer) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(up-research-status c: ri-long-swordsman >= research-pending) | |
(goal enemy-goal eagle-warrior) | |
(unit-type-count militiaman-line < 12) | |
(can-train militiaman-line) | |
=> | |
(train militiaman-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(can-train my-unique-unit-line) | |
(or | |
(current-age == castle-age) | |
(gold-amount > 120) | |
) | |
(or | |
(or | |
(civ-selected mongol) | |
(civ-selected briton) | |
) | |
(and | |
(strategic-number sn-archer-threat >= 1) | |
(civ-selected gothic) | |
) | |
) | |
=> | |
(train my-unique-unit-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-cavalry-threat > 0) | |
(or | |
(game-time < 900); in DM | |
(strategic-number sn-cavalry-threat > 2) | |
) | |
(can-train camel-line) | |
(gold-amount > 250) | |
(or | |
(unit-type-count camel-line < 16) | |
(strategic-number sn-cavalry-threat > 3) | |
) | |
(or | |
(unit-type-count camel-line < 24) | |
(game-time < 600) | |
) | |
=> | |
(train camel-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(game-time < 900) | |
(can-train camel-line) | |
(players-civ focus-player hun) | |
(gold-amount > 250) | |
=> | |
(train camel-line) | |
) | |
#load-if-not-defined WONDER-RACE | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal ranged-unit-type-goal monk) | |
(up-research-status c: ri-sanctity >= research-pending) | |
(or | |
(unit-type-count-total monk < 12) | |
(and | |
(or | |
(players-unit-type-count every-enemy monk < 5) | |
(up-research-status c: ri-atonement >= research-pending) | |
) | |
(or | |
(and | |
(players-unit-type-count every-enemy mangonel-line == 0) | |
(players-unit-type-count every-enemy scorpion-line < 5) | |
) | |
(up-research-status c: ri-redemption >= research-pending) | |
) | |
) | |
) | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(up-research-status c: ri-sanctity >= research-available) | |
(up-research-status c: ri-block-printing >= research-available) | |
(gold-amount > 175) | |
(or | |
(civ-selected aztec) | |
(or | |
(players-unit-type-count focus-player war-elephant-line > 5) | |
(players-unit-type-count focus-player elephant-archer > 10) | |
) | |
) | |
(or | |
(goal anti-monk-threat-goal 0) | |
(and | |
(players-unit-type-count any-enemy war-elephant-line > 25) | |
(unit-type-count monastery-class < 15) | |
) | |
) | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
#end-if | |
#load-if-not-defined TURKISH-CIV | |
#load-if-not-defined POPULATION-CAP-25 | |
#load-if-not-defined UP-POCKET-POSITION | |
(defrule | |
(current-age >= castle-age) | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-cavalry-threat >= 1) | |
(food-amount >= 85) | |
(nand | |
(building-type-count-total town-center == 1) | |
(and | |
(goal unit-goal knight) | |
(research-available ri-pikeman) | |
) | |
) | |
(or | |
(unit-type-count spearman-line < 10) | |
(up-research-status c: ri-pikeman >= research-pending) | |
) | |
(unit-type-count camel-line < 12); don't overdo anti cavalry | |
(unit-type-count imperial-camel < 12) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
(defrule | |
(not (player-valid 3)) | |
(current-age >= castle-age) | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-cavalry-threat > 1) | |
(strategic-number sn-military-level < 0) | |
(or | |
(unit-type-count spearman-line < 10) | |
(up-research-status c: ri-pikeman >= research-pending) | |
) | |
(unit-type-count spearman-line < 18) | |
(unit-type-count camel-line < 12) | |
(unit-type-count imperial-camel < 12) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-cavalry-threat >= 1) | |
(or | |
(food-amount >= 85) | |
(unit-type-count spearman-line < 6) | |
) | |
(or | |
(or | |
(goal unit-goal archer); ranged units are weak vs cavalry | |
(goal unit-goal skirmisher) | |
) | |
(strategic-number sn-military-level >= 1); or try to reach lvl2 and attack | |
) | |
(unit-type-count spearman-line < 15) | |
(unit-type-count camel-line < 12) | |
(unit-type-count imperial-camel < 12) | |
(up-research-status c: ri-pikeman >= research-pending) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
#else | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(strategic-number sn-cavalry-threat < 3) | |
(or | |
(goal unit-goal knight) | |
(and | |
(goal unit-goal my-unique-unit-line) | |
(or | |
(civ-selected spanish) | |
(civ-selected persian) | |
) | |
) | |
) | |
(goal strategy-goal boom) | |
=> | |
(up-jump-rule 1) | |
) | |
(defrule | |
(current-age >= castle-age) | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-cavalry-threat >= 1) | |
(food-amount >= 85) | |
(or | |
(current-age-time > 420) | |
(goal unit-goal archer) | |
) | |
(or | |
(unit-type-count spearman-line < 8) | |
(up-research-status c: ri-pikeman >= research-pending) | |
) | |
(gold-amount < 200) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
#end-if | |
#else | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-cavalry-threat >= 1) | |
(food-amount >= 85) | |
(up-research-status c: ri-pikeman >= research-pending) | |
(unit-type-count spearman-line < 4) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
#end-if | |
#else | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(can-train camel-line) | |
(or | |
(strategic-number sn-cavalry-threat >= 1) | |
(players-unit-type-count focus-player cavalry-archer-line >= 15) | |
) | |
(or | |
(gold-amount > 100) | |
(unit-type-count camel-line < 6) | |
) | |
=> | |
(train camel-line) | |
) | |
#end-if | |
#load-if-defined BYZANTINE-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal unit-goal knight) | |
(or | |
(or | |
(players-unit-type-count focus-player knight-line >= 5); in RM train camels vs mass knights | |
(or | |
(players-unit-type-count focus-player scout-cavalry-line >= 5); or vs scouts + ca | |
(players-unit-type-count focus-player cavalry-archer-line >= 15) | |
) | |
) | |
(or | |
(strategic-number sn-cavalry-threat >= 1) | |
(unit-type-count camel-line < 8) | |
) | |
) | |
(can-train camel-line) | |
=> | |
(train camel-line) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(up-research-status c: ri-pikeman >= research-pending) | |
(gold-amount < 50) | |
(food-amount > 200) | |
(wood-amount > 200) | |
(or | |
(or | |
(civ-selected aztec) | |
(civ-selected viking) | |
) | |
(up-research-status c: ri-halberdier >= research-pending) | |
) | |
(unit-type-count spearman-line < 20) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
(defrule | |
(or (strategic-number sn-resource-control < 1) | |
(or (civ-selected turkish) | |
(civ-selected indian))) | |
(or (and (or (strategic-number sn-cavalry-threat >= 1) | |
(or (players-unit-type-count focus-player cavalry-archer-line >= 15) | |
(unit-type-count camel-line > high-min-number-upgrade))) | |
(unit-type-count camel-line > mid-min-number-upgrade)) | |
(civ-selected indian)) | |
(can-research ri-heavy-camel) | |
=> | |
(research ri-heavy-camel) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) ; anticipate knight defense | |
(goal unit-goal eagle-warrior); so better make some spears and spend our gold to collect relics | |
(food-amount >= 85) | |
(goal enemy-goal rush) | |
(or | |
(or | |
(players-civ focus-player hun) | |
(players-civ focus-player frankish) | |
) | |
(or | |
(players-civ focus-player teutonic) | |
(players-civ focus-player viking) | |
) | |
) | |
(unit-type-count-total monk == 0) | |
(building-type-count-total monastery > 0) | |
(unit-type-count spearman-line < 5) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(up-research-status c: ri-elite-eagle-warrior >= research-pending) | |
(or | |
(current-age-time < 300) | |
(gold-amount > 114) | |
) | |
(nor | |
(players-unit-type-count focus-player teutonic-knight-line > 11) | |
(players-unit-type-count focus-player militiaman-line > 19) | |
) | |
(can-train eagle-warrior-line) | |
=> | |
(train eagle-warrior-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(nand | |
(goal train-civ-goal ri-chain-mail) | |
(gold-amount < 160) | |
) | |
(or | |
(food-amount >= 52); one food drop left to train next villager | |
(or | |
(town-under-attack) | |
(and | |
(goal control-goal aggressive-rush) | |
(current-age-time < 240) | |
) | |
) | |
) | |
(goal unit-goal eagle-warrior) | |
(goal strategy-goal rush) | |
(can-train eagle-warrior-line) | |
=> | |
(train eagle-warrior-line) | |
) | |
(defrule | |
(current-age == castle-age) | |
(strategic-number sn-resource-control < 1) | |
(or | |
(gold-amount > 120) | |
(strategic-number sn-military-level < 0) | |
) | |
(food-amount >= 52) | |
(goal unit-goal mix) | |
(goal strategy-goal rush) | |
(can-train eagle-warrior-line) | |
=> | |
(train eagle-warrior-line) | |
) | |
#load-if-defined MAYAN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(players-unit-type-count focus-player huskarl-line > 3) | |
(or | |
(players-unit-type-count any-enemy militiaman-line < 12) | |
(or | |
(unit-type-count archer-line > 12) | |
(unit-type-count plumed-archer-line > 12) | |
) | |
) | |
(can-train eagle-warrior-line) | |
=> | |
(train eagle-warrior-line) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(gold-amount > 150) | |
(current-age == castle-age) | |
) | |
(or | |
(players-unit-type-count focus-player monk > 5) | |
(goal control-goal shot) | |
) | |
(unit-type-count eagle-warrior < 15) | |
(can-train eagle-warrior-line) | |
=> | |
(train eagle-warrior-line) | |
) | |
(defrule | |
(goal unit-goal eagle-warrior) | |
(strategic-number sn-resource-control < 1) | |
(food-amount > 70) | |
(gold-amount > 150) | |
(unit-type-count eagle-warrior < 15) | |
(can-train eagle-warrior-line) | |
=> | |
(train eagle-warrior-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(gold-amount > 120) | |
(players-unit-type-count focus-player skirmisher-line > 15) | |
(or | |
(civ-selected japanese) | |
(civ-selected viking) | |
) | |
(up-research-status c: ri-heavy-scorpion >= research-pending) | |
(can-train scorpion-line) | |
=> | |
(train scorpion-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-archer-threat >= 2) | |
(or | |
(gold-amount > 220) | |
(and | |
(or | |
(strategic-number sn-cavalry-threat < 2) | |
(or | |
(unit-type-count camel-line > mid-min-number-upgrade) | |
(unit-type-count spearman-line > high-min-number-upgrade) | |
) | |
) | |
(players-unit-type-count every-enemy eagle-warrior-line < high-min-number-upgrade) | |
) | |
) | |
(up-research-status c: ri-heavy-scorpion >= research-pending) | |
(can-train scorpion-line) | |
=> | |
(train scorpion-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(current-age == feudal-age) | |
(or | |
(and | |
(strategic-number sn-current-age == fc-transit) | |
(goal control-goal aggressive-rush) | |
) | |
(and | |
(building-type-count-total blacksmith > 0) | |
(gold-amount > 245) | |
) | |
) | |
(goal unit-goal archer) | |
(can-train archer-line) | |
=> | |
(train archer-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(up-research-status c: ri-crossbow >= research-pending) | |
(goal ranged-unit-type-goal archer) | |
(nor (can-train longbowman-line) | |
(can-train plumed-archer-line)) | |
(nor (can-train war-wagon-line) | |
(goal strategy-goal boom)) | |
(gold-amount > 120) | |
(can-train archer-line) | |
=> | |
(train archer-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(wood-amount > 100) | |
(gold-amount >= 145) | |
(strategic-number sn-current-age >= fc-transit) | |
(or | |
(game-time < 1800) | |
(civ-selected viking) | |
) | |
(goal ranged-unit-type-goal archer) | |
(goal strategy-goal boom) | |
(can-train archer-line) | |
=> | |
(train archer-line) | |
) | |
#load-if-not-defined SARACEN-CIV | |
(defrule | |
(or | |
(strategic-number sn-resource-control < 1) | |
(and | |
(or | |
(or | |
(strategic-number sn-resource-control == ri-pikeman) | |
(strategic-number sn-resource-control == ri-bodkin-arrow) | |
) | |
(strategic-number sn-resource-control == ri-crossbow) | |
) | |
(gold-amount >= 145); don't stop producing archers if we need only food for our research | |
) | |
) | |
(strategic-number sn-current-age >= fc-transit) | |
(game-time < 1800) | |
(goal unit-goal archer) | |
(goal strategy-goal rush) | |
(can-train archer-line) | |
=> | |
(train archer-line) | |
) | |
#else | |
(defrule | |
(strategic-number sn-resource-control < 1); buy food instead if with saracen | |
(strategic-number sn-current-age >= fc-transit) | |
(game-time < 1800) | |
(goal unit-goal archer) | |
(goal strategy-goal rush) | |
(can-train archer-line) | |
=> | |
(train archer-line) | |
) | |
#end-if | |
#load-if-defined MAGYAR-CIV | |
(defrule | |
(or | |
(strategic-number sn-resource-control < 1) | |
(and | |
(research-available imperial-age) | |
(and | |
(food-amount > 1070) | |
(gold-amount < 700) | |
) | |
) | |
) | |
(food-amount >= unique-unit-food); > 150 | |
(can-train magyar-huszar) | |
=> | |
(train magyar-huszar) | |
) | |
#end-if | |
#load-if-defined SLAVIC-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(current-age == castle-age) | |
(gold-amount > 120) | |
) | |
(or | |
(unit-type-count villager > 75) | |
(food-amount >= unique-unit-food) | |
) | |
(can-train boyar) | |
=> | |
(train boyar) | |
) | |
#end-if | |
#load-if-not-defined DIFFICULTY-EASIEST | |
#load-if-not-defined DIFFICULTY-EASY | |
#load-if-defined CELTIC-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-current-age == fc-transit) | |
(goal strategy-goal flush) | |
(wood-amount > 200) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
#end-if | |
#load-if-not-defined UP-MULTIPLE-ENEMIES | |
(defrule | |
(current-age >= castle-age) | |
(strategic-number sn-resource-control == 2) | |
(up-research-status c: ri-pikeman >= research-pending) | |
(wood-amount > 400); gold shortage while getting imperial researches | |
(food-amount > 400); so keep slots filled | |
(gold-amount < 200); with non-gold units | |
(population < max-civ-pop) | |
(nand | |
(up-research-status c: ri-bracer >= research-pending) | |
(unit-type-count spearman-line > 40) | |
) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(up-research-status c: ri-pikeman >= research-pending) | |
(research-available imperial-age) | |
(population < max-civ-pop) | |
(or | |
(food-amount > imp-food) | |
(gold-amount < 300) | |
) | |
(food-amount > 400) | |
(gold-amount < imp-gold) | |
(wood-amount >= 100) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(up-research-status c: ri-elite-skirmisher >= research-available) | |
(research-available imperial-age) | |
(population < max-civ-pop) | |
(or | |
(food-amount > imp-food) | |
(gold-amount < 300) | |
) | |
(food-amount > 400) | |
(gold-amount < imp-gold) | |
(wood-amount >= 100) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
#end-if; NOT EASY | |
#end-if; NOT EASIEST | |
#load-if-not-defined GOTHIC-CIV | |
#load-if-not-defined SPANISH-CIV | |
#load-if-not-defined BRITON-CIV | |
#load-if-not-defined BYZANTINE-CIV | |
#load-if-not-defined KOREAN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal unit-goal my-unique-unit-line) | |
(goal strategy-goal rush) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count knight-line < 12) | |
(can-train knight-line) | |
=> | |
(train knight-line) | |
) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(and | |
(goal unit-goal cavalry-archer) | |
(up-research-status c: ri-bloodlines >= research-pending) | |
) | |
(goal unit-goal mix) | |
) | |
(or | |
(building-type-count-total archery-range < 6) | |
(goal enemy-goal eagle-warrior) | |
) | |
(goal strategy-goal rush) | |
(current-age == castle-age) | |
(unit-type-count knight-line < 12) | |
(can-train knight-line) | |
=> | |
(train knight-line) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal unit-goal skirmisher) | |
(or | |
(players-unit-type-count focus-player eagle-warrior-line > 5) | |
(strategic-number sn-military-level >= 2) | |
) | |
(nand | |
(civ-selected byzantine) | |
(building-type-count castle > 0) | |
) | |
(goal strategy-goal rush) | |
(current-age == castle-age) | |
(unit-type-count knight-line < 12) | |
(can-train knight-line) | |
=> | |
(train knight-line) | |
) | |
#load-if-not-defined DEATH-MATCH | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal unit-goal archer) | |
(up-compare-goal position-goal == flank) | |
(game-time < 1800) | |
(or | |
(goal enemy-goal eagle-warrior) | |
(or | |
(up-compare-goal enemy-goal != flush) | |
(or | |
(players-building-type-count focus-player market > 0) | |
(players-building-type-count focus-player barracks > 1) | |
) | |
) | |
) | |
(unit-type-count knight-line < 6) | |
(can-train knight-line) | |
=> | |
(train knight-line) | |
) | |
#end-if | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(and | |
(goal strategy-goal flush) | |
(current-age == castle-age) | |
) | |
(and | |
(up-research-status c: ri-cavalier >= research-pending) | |
(gold-amount > 150) | |
) | |
) | |
(or | |
(or | |
(goal anti-cavalry-threat-goal 0) | |
(military-population < 30) | |
) | |
(death-match-game) | |
) | |
(can-train knight-line) | |
=> | |
(train knight-line) | |
) | |
#else | |
#load-if-not-defined SLAVIC-CIV | |
#load-if-not-defined GOTHIC-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(up-research-status c: ri-cavalier >= research-pending) | |
(or | |
(up-research-status c: ri-bloodlines >= research-pending) | |
(up-research-status c: ri-paladin >= research-pending) | |
) | |
(or | |
(goal anti-cavalry-threat-goal 0) | |
(or | |
(game-time < 480) | |
(and | |
(civ-selected hun) | |
(death-match-game) | |
) | |
) | |
) | |
(can-train knight-line) | |
=> | |
(train knight-line) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(game-time < 240) | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(goal unit-goal knight) | |
(and | |
(up-research-status c: ri-paladin >= research-pending) | |
(players-unit-type-count every-enemy spearman-line < 25) | |
) | |
) | |
(or | |
(current-age == castle-age) | |
(gold-amount > 100) | |
) | |
(can-train knight-line) | |
=> | |
(train knight-line) | |
) | |
; balance resources | |
#load-if-defined ITALIAN-CIV | |
(defrule | |
(strategic-number sn-resource-control != ri-elite-skirmisher) | |
(strategic-number sn-resource-control != ri-heresy) | |
(gold-amount > 250) | |
(food-amount < 200) | |
(or | |
(food-amount < 80) | |
(gold-amount > 400) | |
) | |
(can-train genoese-crossbowman); same rule as below, because my-uu-line doesn't work with aofe uu | |
=> | |
(train genoese-crossbowman) | |
) | |
#end-if | |
#load-if-not-defined INCAN-CIV | |
#load-if-not-defined INDIAN-CIV | |
#load-if-not-defined MAGYAR-CIV | |
#load-if-not-defined SLAVIC-CIV | |
#load-if-not-defined AZTEC-CIV | |
#load-if-not-defined CELTIC-CIV | |
#load-if-not-defined FRANKISH-CIV | |
#load-if-not-defined GOTHIC-CIV | |
#load-if-not-defined HUN-CIV | |
#load-if-not-defined JAPANESE-CIV | |
#load-if-not-defined PERSIAN-CIV | |
#load-if-not-defined SARACEN-CIV | |
#load-if-not-defined SPANISH-CIV | |
#load-if-not-defined TEUTONIC-CIV | |
#load-if-not-defined TURKISH-CIV | |
#load-if-not-defined VIKING-CIV | |
#load-if-not-defined BYZANTINE-CIV | |
(defrule | |
(strategic-number sn-resource-control != ri-elite-skirmisher) | |
(strategic-number sn-resource-control != ri-heresy) | |
(gold-amount > 250) | |
(food-amount < 200) | |
(or | |
(food-amount < 80) | |
(gold-amount > 400) | |
) | |
(can-train my-unique-unit-line); ranged uu | |
=> | |
(train my-unique-unit-line) | |
) | |
#end-if | |
(defrule | |
(current-age >= castle-age) | |
(or | |
(and | |
(and | |
(or | |
(civ-selected briton) | |
(civ-selected mayan) | |
) | |
(goal unit-goal my-unique-unit-line) | |
) | |
(goal strategy-goal rush) | |
) | |
(building-type-count castle >= 2) | |
) | |
=> | |
(set-goal ranged-unit-type-goal 0) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(current-age >= castle-age) | |
(goal unit-goal knight) | |
(goal strategy-goal rush) | |
(building-type-count castle > 0) | |
(or | |
(or | |
(civ-selected mongol) | |
(civ-selected chinese) | |
) | |
(civ-selected briton) | |
) | |
=> | |
(set-goal ranged-unit-type-goal uu) | |
(set-goal uu-up-goal 1) | |
(disable-self) | |
) | |
(defrule | |
(game-time > 20) | |
(game-time < 60) | |
(goal strategy-goal boom) | |
(goal unit-goal my-unique-unit-line) | |
(up-compare-goal ranged-unit-type-goal != scorpion) | |
(up-compare-goal ranged-unit-type-goal != monk) | |
(up-compare-goal ranged-unit-type-goal != gunpowder-class) | |
=> | |
(set-goal ranged-unit-type-goal uu) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-not-defined INCAN-CIV | |
#load-if-not-defined AZTEC-CIV | |
#load-if-not-defined BRITON-CIV | |
#load-if-not-defined BYZANTINE-CIV | |
#load-if-not-defined CHINESE-CIV | |
#load-if-not-defined HUN-CIV | |
#load-if-not-defined ITALIAN-CIV | |
#load-if-not-defined JAPANESE-CIV | |
#load-if-not-defined KOREAN-CIV | |
#load-if-not-defined MAYAN-CIV | |
#load-if-not-defined MAGYAR-CIV | |
#load-if-not-defined MONGOL-CIV | |
#load-if-not-defined SARACEN-CIV | |
#load-if-not-defined VIKING-CIV | |
(defrule | |
(nand | |
(up-research-status c: ri-crossbow >= research-pending) | |
(game-time < 2400) | |
) | |
(or | |
(or | |
(building-type-count siege-workshop > 0) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
) | |
(goal strategy-goal boom) | |
) | |
(up-compare-goal unit-goal g:!= ranged-unit-type-goal) | |
(up-compare-goal ranged-unit-type-goal != scorpion) | |
(up-compare-goal ranged-unit-type-goal != monk) | |
(up-compare-goal ranged-unit-type-goal != gunpowder-class) | |
=> | |
(set-goal ranged-unit-type-goal 0) | |
) | |
#load-if-defined DEATH-MATCH | |
#load-if-not-defined TURKISH-CIV | |
(defrule | |
(up-compare-goal ranged-unit-type-goal != 0) | |
=> | |
(set-goal ranged-unit-type-goal 0) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal ranged-unit-type-goal cavalry-archer) | |
(or | |
(gold-amount > 125) | |
(goal unit-goal cavalry-archer) | |
) | |
(or | |
(gold-amount > 100) | |
(and | |
(goal control-goal aggressive-rush) | |
(current-age == castle-age) | |
) | |
) | |
(or | |
(dropsite-min-distance wood < 4) | |
(wood-amount > 140) | |
) | |
(can-train cavalry-archer-line) | |
=> | |
(train cavalry-archer-line) | |
) | |
#load-if-not-defined HUN-CIV | |
(defrule | |
(strategic-number sn-resource-control != battering-ram) | |
(strategic-number sn-resource-control != ri-elite-skirmisher) | |
(strategic-number sn-resource-control != ri-heresy) | |
(up-research-status c: ri-crossbow >= research-pending) | |
(goal ranged-unit-type-goal archer) | |
(wood-amount > 90) | |
(gold-amount > 250) | |
(food-amount < 200) | |
(or | |
(food-amount < 80) | |
(gold-amount > 400) | |
) | |
(can-train archer-line) | |
=> | |
(train archer-line) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control != ri-elite-skirmisher) | |
(strategic-number sn-resource-control != ri-heresy) | |
(nor (can-train chu-ko-nu-line) | |
(can-train mangudai-line)) | |
(goal ranged-unit-type-goal cavalry-archer) | |
(wood-amount > 90) | |
(gold-amount > 250) | |
(or | |
(food-amount < 200) | |
(game-time < 720) | |
) | |
(or | |
(food-amount < 80) | |
(gold-amount > 400) | |
) | |
(can-train cavalry-archer-line) | |
=> | |
(train cavalry-archer-line) | |
) | |
(defrule | |
(current-age >= castle-age) | |
(strategic-number sn-resource-control < 1) | |
(goal unit-goal militiaman-line) | |
(goal strategy-goal rush) | |
(not (research-available ri-long-swordsman)) | |
(unit-type-count militiaman-line < 15) | |
(game-time < 1800); this strategy is currently only used that early against EW rush | |
(can-train militiaman-line) | |
=> | |
(train militiaman-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or (goal unit-goal militiaman-line) | |
(goal control-goal militiaman-line)) | |
(food-amount > 100) | |
(or (and (and (current-age == castle-age) | |
(up-research-status c: ri-long-swordsman >= research-pending)) | |
(unit-type-count militiaman-line < 30)) | |
(and (up-research-status c: ri-two-handed-swordsman >= research-pending) | |
(gold-amount > 90))) | |
(can-train militiaman-line) | |
=> | |
(train militiaman-line) | |
) | |
#load-if-defined GOTHIC-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(food-amount > 100) | |
(gold-amount > 90) | |
(can-train rax-husky-line) | |
=> | |
(train rax-husky-line) | |
(set-goal unit-goal my-unique-unit-line) | |
) | |
#end-if | |
#load-if-defined INDIAN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(can-train elephant-archer) | |
(or | |
(or | |
(unit-type-count villager > 75) | |
(goal train-civ-goal -1) | |
) | |
(food-amount >= unique-unit-food) | |
) | |
(or | |
(current-age == castle-age) | |
(gold-amount > 100) | |
) | |
=> | |
(train elephant-archer) | |
) | |
#end-if | |
#load-if-not-defined HUN-CIV | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(can-train my-unique-unit-line) | |
(or | |
(up-research-status c: my-unique-unit-upgrade >= research-pending) | |
(or | |
(goal unit-goal my-unique-unit-line) | |
(goal control-goal my-unique-unit-line) | |
) | |
) | |
(or | |
(or | |
(unit-type-count villager > 75) | |
(goal train-civ-goal -1) | |
) | |
(food-amount >= unique-unit-food) | |
) | |
(or | |
(current-age == castle-age) | |
(gold-amount > 100) | |
) | |
=> | |
(train my-unique-unit-line) | |
) | |
(defrule | |
(goal unit-goal my-unique-unit-line) | |
(can-train my-unique-unit-line) | |
(or | |
(and | |
(unit-type-count-total my-unique-unit-line < 5) | |
(civ-selected byzantine) | |
) | |
(civ-selected gothic) | |
) | |
(unit-type-count-total my-unique-unit-line < 12) | |
(current-age == castle-age) | |
=> | |
(train my-unique-unit-line) | |
) | |
#end-if | |
#load-if-not-defined AZTEC-CIV | |
#load-if-not-defined BRITON-CIV | |
#load-if-not-defined CHINESE-CIV | |
#load-if-not-defined KOREAN-CIV | |
#load-if-not-defined MONGOL-CIV | |
#load-if-not-defined SARACEN-CIV | |
#load-if-not-defined TURKISH-CIV | |
#load-if-not-defined SLAVIC-CIV | |
#load-if-not-defined ITALIAN-CIV | |
(defrule | |
(up-research-status c: my-unique-unit-upgrade >= research-pending) | |
(building-type-count castle > 2) | |
=> | |
(up-jump-rule 1) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(up-research-status c: ri-champion >= research-pending) | |
(food-amount > 100) | |
(gold-amount > 200) | |
(can-train militiaman-line) | |
=> | |
(train militiaman-line) | |
) | |
#load-if-defined DARK-AGE-END | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(can-train militiaman-line) | |
=> | |
(train militiaman-line) | |
) | |
#end-if | |
; Flush | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal strategy-goal flush) | |
(or | |
(food-amount >= 130) | |
(current-age-time < 120) | |
) | |
(current-age == feudal-age) | |
(or | |
(current-age-time < 480) | |
(and | |
(food-amount < 500) | |
(players-military-population every-enemy < 8) | |
) | |
) | |
(up-research-status c: ri-man-at-arms < research-pending) | |
(can-train scout-cavalry-line) | |
=> | |
(train scout-cavalry-line) | |
) | |
#load-if-defined FEUDAL-AGE-END | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(food-amount >= 130) | |
(current-age == feudal-age) | |
(or | |
(up-research-status c: ri-man-at-arms < research-pending) | |
(players-unit-type-count focus-player skirmisher-line > 18) | |
) | |
(can-train scout-cavalry-line) | |
=> | |
(train scout-cavalry-line) | |
) | |
#end-if | |
(defrule | |
(goal strategy-goal flush) | |
(strategic-number sn-gold-gatherer-percentage > 10) | |
(strategic-number sn-current-age == feudal) | |
(or | |
(and | |
(food-amount < 600) | |
(strategic-number sn-resource-control < 1) | |
) | |
(and | |
(gold-amount >= 245) | |
(strategic-number sn-resource-control <= 2) | |
) | |
) | |
(can-train archer-line) | |
=> | |
(train archer-line) | |
) | |
(defrule | |
(current-age-time < 180) | |
(strategic-number sn-resource-control < 1) | |
(goal strategy-goal flush) | |
(current-age == feudal-age) | |
(players-building-type-count focus-player stable == 0) | |
(players-military-population focus-player > 4) | |
(or | |
(military-population < 3) | |
(players-military-population focus-player > 8) | |
) | |
(military-population < 6) | |
(strategic-number sn-current-age == feudal) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(goal strategy-goal flush) | |
(current-age == feudal-age) | |
(or | |
(strategic-number sn-gold-gatherer-percentage <= 10) | |
(and | |
(strategic-number sn-current-age == fc-transit) | |
(goal ranged-unit-type-goal archer) | |
) | |
) | |
(gold-amount >= 245) | |
(can-train archer-line) | |
=> | |
(train archer-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal strategy-goal flush) | |
(wood-amount > 70);dont run out of stock while spaming skirmishers | |
(food-amount > 74) | |
(or | |
(food-amount < 700) | |
(and | |
(food-amount >= 825) | |
(building-type-count-total blacksmith > 0) | |
) | |
) | |
(nand | |
(up-research-status c: ri-man-at-arms >= research-pending) | |
(goal enemy-goal eagle-warrior) | |
) | |
(strategic-number sn-current-age == feudal) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal strategy-goal flush) | |
(nand | |
(up-research-status c: ri-man-at-arms >= research-pending) | |
(goal enemy-goal eagle-warrior) | |
) | |
(building-type-count-total blacksmith > 0); castle age advancement is already prepared | |
(current-age == feudal-age); as no resource restriction on this rule | |
(strategic-number sn-military-level < 0); use this only to catch up with enemy military | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal strategy-goal flush) | |
(goal enemy-goal flush) | |
(strategic-number sn-current-age == fc-transit) | |
(strategic-number sn-military-level < 1) | |
(wood-amount > 250) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
(defrule | |
(current-age == feudal-age) | |
(strategic-number sn-resource-control < 1) | |
(goal strategy-goal flush) | |
(up-research-status c: ri-man-at-arms >= research-pending) | |
(goal unit-goal militiaman-line) | |
(or (goal enemy-goal eagle-warrior) | |
(or (current-age-time < 480) | |
(and (strategic-number sn-current-age == fc-transit) | |
(food-amount >= 260)))) | |
(food-amount > 100) | |
(can-train militiaman-line) | |
=> | |
(train militiaman-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(current-age == dark-age) | |
(goal unit-goal militiaman-line) | |
(strategic-number sn-current-age == df-transit) | |
(food-amount > 260) | |
(nand (civ-selected gothic) | |
(not (death-match-game))) | |
(can-train militiaman-line) | |
=> | |
(train militiaman-line) | |
) | |
(defrule | |
(game-time < 900) | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal flush) | |
(or (players-civ focus-player hun) | |
(players-civ focus-player mongol)) | |
(players-building-type-count focus-player archery-range < 2) | |
(unit-type-count spearman-line < 2) | |
(not (goal unit-goal militiaman-line)) | |
(can-train spearman-line); make spearman fast so the flush won't die vs quick scouts. | |
=> | |
(train spearman-line) | |
) | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal flush) | |
(unit-type-count spearman-line < 5) | |
(or | |
(and | |
(and | |
(building-type-count-total archery-range > 0); archery-range not yet finished | |
(building-type-count archery-range == 0) | |
) | |
(players-military-population focus-player > 2); enemy is very fast | |
) | |
(goal enemy-goal rush) | |
) | |
(goal meso-enemy-goal -1) | |
(can-train spearman-line); make spearman to keep up with military production | |
=> | |
(train spearman-line) | |
) | |
#load-if-not-defined WONDER-RACE ;Wonderrace ends too fast to make gold from relics | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal ranged-unit-type-goal monk) | |
(or | |
(goal enemy-goal flush) | |
(and | |
(up-compare-goal position-goal == flank) | |
(strategic-number sn-archer-threat > 1) | |
) | |
) | |
(research-available ri-sanctity) | |
(building-type-count monastery > 0) | |
=> | |
(set-strategic-number sn-resource-control 2) | |
) | |
#load-if-defined AZTEC-CIV | |
(defrule | |
(goal strategy-goal boom) | |
(goal unit-goal archer) | |
=> | |
(up-jump-rule 3) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal train-civ-goal 1) | |
(or | |
(and | |
(up-compare-goal ranged-unit-type-goal != monk) | |
(up-research-status c: ri-sanctity >= research-pending) | |
) | |
(unit-type-count monk < 6) | |
) | |
(food-amount < 150) | |
(gold-amount > 200) | |
(goal anti-monk-threat-goal 0) | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(nand | |
(goal unit-goal eagle-warrior) | |
(strategic-number sn-cavalry-threat == 0) | |
) | |
(or | |
(unit-type-count monk < 8) | |
(and | |
(food-amount < 600) | |
(gold-amount > 750) | |
) | |
) | |
(goal anti-monk-threat-goal 0) | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-current-age >= ci-transit) | |
(gold-amount > 175) | |
(or | |
(players-unit-type-count every-enemy monk < 5) | |
(up-research-status c: ri-atonement >= research-pending) | |
) | |
(or | |
(and | |
(players-unit-type-count every-enemy mangonel-line == 0) | |
(players-unit-type-count every-enemy scorpion-line < 5) | |
) | |
(up-research-status c: ri-redemption >= research-pending) | |
) | |
(goal anti-monk-threat-goal 0) | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal ranged-unit-type-goal monk) | |
(unit-type-count monk < 6) | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal train-civ-goal 1) | |
(or | |
(up-research-status c: ri-sanctity >= research-pending) | |
(unit-type-count monk < 6) | |
) | |
(up-research-status c: ri-pikeman >= research-pending) | |
(goal anti-monk-threat-goal 0) | |
(strategic-number sn-cavalry-threat >= 1) | |
(or | |
(goal unit-goal mix) | |
(goal unit-goal skirmisher) | |
) | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal train-civ-goal 1) | |
(or | |
(up-research-status c: ri-sanctity >= research-pending) | |
(unit-type-count monk < 6) | |
) | |
(food-amount < 100) | |
(gold-amount > 300) | |
(current-age == castle-age) | |
(goal anti-monk-threat-goal 0) | |
(strategic-number sn-cavalry-threat > 1) | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(goal train-civ-goal 1) | |
(or | |
(up-research-status c: ri-sanctity >= research-pending) | |
(unit-type-count monk < 6) | |
) | |
(gold-amount > 200) | |
(current-age == castle-age) | |
(goal anti-monk-threat-goal 0) | |
(strategic-number sn-cavalry-threat > 1) | |
(goal unit-goal cavalry-archer) | |
(goal control-goal aggressive-rush) | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
(defrule | |
(or (player-resigned every-ally) | |
(not (player-in-game any-ally))) | |
(players-building-type-count every-ally market == 0) | |
(housing-headroom < 10) | |
(or (unit-type-count trade-cart > 0) | |
(unit-type-count trade-cog > 0)) | |
=> | |
(delete-unit trade-cart) | |
(delete-unit trade-cog) | |
) | |
(defrule | |
(gold-amount > 200) | |
(population >= del-civ-pop) | |
(housing-headroom < 10) | |
(or (unit-type-count-total villager >= 1) | |
(building-type-count-total town-center >= 1)) | |
(unit-type-count-total trade-cart > 80) | |
=> | |
(delete-unit trade-cart)) | |
(defrule | |
(gold-amount > 200) | |
(population >= del-civ-pop) | |
(housing-headroom < 10) | |
(or (unit-type-count-total villager >= 1) | |
(building-type-count-total town-center >= 1)) | |
(unit-type-count-total trade-cog > 80) | |
=> | |
(delete-unit trade-cog)) | |
#end-if ;not WONDER-RACE | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(food-amount > 200) | |
(or | |
(gold-amount < 100) | |
(and | |
(strategic-number sn-current-age >= ci-transit) | |
(population < max-civ-pop) | |
) | |
) | |
(up-research-status c: ri-light-cavalry >= research-pending) | |
(nor | |
(and | |
(up-research-status c: ri-bloodlines < research-pending) | |
(goal anti-cavalry-threat-goal 1) | |
) | |
(can-train magyar-huszar) | |
) | |
(can-train scout-cavalry-line) | |
=> | |
(train scout-cavalry-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(up-research-status c: ri-light-cavalry >= research-pending) | |
(research-available imperial-age) | |
(not (can-train magyar-huszar)) | |
(food-amount > 1070) | |
(gold-amount < 700) | |
(can-train scout-cavalry-line) | |
=> | |
(train scout-cavalry-line) | |
) | |
#else | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(population < seventy-five-percent-pop) | |
(gold-amount > 1000) | |
(up-research-status c: ri-cavalier >= research-pending) | |
(can-train knight-line) | |
=> | |
(train knight-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(food-amount > 400) | |
(gold-amount < 100) | |
(not (can-train magyar-huszar)) | |
(up-research-status c: ri-light-cavalry >= research-pending) | |
(can-train scout-cavalry-line) | |
=> | |
(train scout-cavalry-line) | |
) | |
#end-if | |
#load-if-not-defined TURKISH-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count skirmisher-line < 20) | |
(strategic-number sn-archer-threat >= 1) | |
(or | |
(up-research-status c: ri-elite-skirmisher >= research-pending) | |
(unit-type-count skirmisher-line < 7) | |
) | |
(nand | |
(gold-amount > 400) | |
(unit-type-count trade-cart > 20) | |
) | |
(wood-amount > 145) | |
(current-age >= castle-age) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-current-age >= fc-transit) | |
(goal strategy-goal rush) | |
(or | |
(and | |
(gold-amount >= 145) | |
(wood-amount >= 100) | |
) | |
(players-unit-type-count focus-player militiaman-line > 0) | |
) | |
(goal ranged-unit-type-goal archer) | |
(or | |
(goal unit-goal mix) | |
(goal unit-goal skirmisher) | |
) | |
(military-population < 8) | |
(can-train archer-line) | |
=> | |
(train archer-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(gold-amount < 750) | |
(up-research-status c: ri-elite-skirmisher >= research-pending) | |
(or | |
(and | |
(research-available my-unique-research) | |
(civ-selected aztec) | |
) | |
(research-available ri-hussar) | |
) | |
(wood-amount > 250) | |
(food-amount > 500) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(unit-type-count spearman-line > 14) | |
(research-available ri-halberdier) | |
(nor | |
(research-available ri-blast-furnace) | |
(research-available ri-bracer) | |
) | |
(nor | |
(research-available ri-plate-mail) | |
(research-available ri-plate-barding) | |
) | |
(up-research-status c: ri-chemistry >= research-pending) | |
(wood-amount > 250) | |
(food-amount > 350) | |
(gold-amount < 600) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-current-age >= fc-transit) | |
(game-time < 1320) | |
(unit-type-count spearman-line < 4) | |
(goal strategy-goal rush) | |
(goal unit-goal skirmisher) | |
(goal enemy-goal rush) | |
(goal meso-enemy-goal -1) | |
(can-train spearman-line); make spearman so enemy won't raid us with knights | |
=> | |
(train spearman-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or | |
(game-time < 1800) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(strategic-number sn-resource-control < 1) | |
(building-type-count-total town-center >= tc-level-two) | |
(goal unit-goal skirmisher) | |
(wood-amount > 115) | |
(food-amount > 85) | |
(goal strategy-goal rush) | |
(unit-type-count spearman-line < 10) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
#load-if-not-defined AZTEC-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-current-age >= fc-transit) | |
(or | |
(military-population < 4) | |
(building-type-count-total monastery > 0) | |
) | |
(goal strategy-goal rush) | |
(or | |
(goal unit-goal mix) | |
(goal unit-goal skirmisher) | |
) | |
(food-amount > 90) | |
(wood-amount > 95) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-current-age >= fc-transit) | |
(goal strategy-goal rush) | |
(goal unit-goal skirmisher) | |
(or | |
(goal enemy-goal skirmisher) | |
(and | |
(players-military-population focus-player > 4) | |
(players-current-age focus-player == feudal-age) | |
) | |
) | |
(or | |
(military-population < 8) | |
(strategic-number sn-military-level < 0) | |
) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-current-age == fc-transit) | |
(military-population < 8) | |
(goal strategy-goal rush) | |
(goal unit-goal skirmisher) | |
(goal enemy-goal flush) | |
(up-research-status c: ri-double-bit-axe >= research-pending) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(strategic-number sn-current-age == fc-transit) | |
(and | |
(gold-amount > 145) | |
(building-type-count-total monastery > 0) | |
) | |
) | |
(wood-amount > 85) | |
(goal strategy-goal rush) | |
(goal ranged-unit-type-goal archer) | |
(goal unit-goal skirmisher) | |
(can-train archer-line) | |
=> | |
(train archer-line) | |
) | |
(defrule | |
(current-age == castle-age) | |
(current-age-time < 400) | |
(strategic-number sn-resource-control < 1) | |
;tl (food-amount >= 85) | |
(goal strategy-goal rush) | |
(goal unit-goal archer) | |
(nor | |
(research-available ri-crossbow) | |
(goal enemy-goal flush) | |
) | |
(or | |
(or | |
(players-civ focus-player frankish) | |
(players-civ focus-player persian) | |
) | |
(players-civ any-enemy hun) | |
) | |
(unit-type-count spearman-line < 8) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
#load-if-not-defined UP-POCKET-POSITION | |
(defrule | |
(current-age == castle-age) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(strategic-number sn-resource-control != battering-ram) | |
(strategic-number sn-archer-threat > 1) | |
(unit-type-count scorpion-line < 8) | |
(or | |
(goal unit-goal eagle-warrior) | |
(goal unit-goal monk) | |
) | |
(can-train scorpion-line) | |
=> | |
(train scorpion-line) | |
) | |
#end-if | |
#load-if-not-defined CHINESE-CIV | |
#load-if-not-defined MONGOL-CIV | |
#load-if-not-defined MAYAN-CIV | |
#load-if-not-defined BRITON-CIV | |
#load-if-not-defined BYZANTINE-CIV | |
#load-if-not-defined AZTEC-CIV | |
(defrule | |
(goal unit-goal gunpowder-class) | |
(goal strategy-goal fast-imp) | |
(building-type-count-total castle == 0) | |
=> | |
(up-jump-rule 6) | |
) | |
#load-if-not-defined UP-POCKET-POSITION | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal save-wood-goal 0) | |
(strategic-number sn-archer-threat >= 1) | |
(unit-type-count scorpion-line < 5) | |
(or | |
(and | |
(food-amount < 50) | |
(strategic-number sn-military-level < 0) | |
) | |
(and | |
(up-research-status c: ri-elite-skirmisher < research-complete) | |
(up-compare-goal unit-goal != eagle-warrior) | |
) | |
) | |
(can-train scorpion-line) | |
=> | |
(train scorpion-line) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(players-unit-type-count focus-player spearman-line > 20) | |
(unit-type-count scorpion-line < 15) | |
(unit-type-count cavalry-unit-class > 20) | |
(up-research-status c: ri-heavy-scorpion >= research-pending) | |
(can-train scorpion-line) | |
=> | |
(train scorpion-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-archer-threat >= 1) | |
(unit-type-count scorpion-line < 12) | |
(or | |
(and | |
(gold-amount > 150) | |
(food-amount < 75) | |
) | |
(civ-selected turkish) | |
) | |
(can-train scorpion-line) | |
=> | |
(train scorpion-line) | |
) | |
#load-if-not-defined SLAVIC-CIV | |
#load-if-not-defined CELTIC-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(nor (goal strategy-goal fast-imp) | |
(goal unit-goal default-ranged)) | |
(strategic-number sn-resource-control < 1) | |
(can-train scorpion-line) | |
(unit-type-count scorpion-line < 12) | |
(wood-amount > 400); excess wood and gold | |
(gold-amount > 300) | |
(food-amount < 200) | |
=> | |
(train scorpion-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(up-research-status c: ri-elite-skirmisher < research-pending) | |
(goal unit-goal monk) | |
(strategic-number sn-resource-control < 1) | |
(can-train scorpion-line) | |
(strategic-number sn-archer-threat >= 1) | |
(unit-type-count scorpion-line < 6) | |
(wood-amount > 200) | |
=> | |
(train scorpion-line) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(or | |
(or | |
(civ-selected celtic) | |
(civ-selected slavic) | |
) | |
(or | |
(goal ranged-unit-type-goal scorpion) | |
(goal unit-goal scorpion) | |
) | |
) | |
(or | |
(strategic-number sn-resource-control < 1) | |
(and | |
(strategic-number sn-resource-control == 2) | |
(food-amount < 100) | |
) | |
) | |
(population < del-civ-pop) | |
(can-train scorpion-line) | |
(gold-amount > scorpion-gold-min) | |
=> | |
(train scorpion-line) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-defined BYZANTINE-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(strategic-number sn-resource-control < 1) | |
(can-train archer-line) | |
(up-research-status c: ri-arbalest >= research-pending) | |
(wood-amount > 400); excess wood and gold | |
(gold-amount > 300) | |
(food-amount < 200) | |
=> | |
(train archer-line) | |
) | |
#end-if | |
#load-if-not-defined MAGYAR-CIV | |
(defrule | |
(strategic-number sn-resource-control == 2) | |
(or | |
(and | |
(wood-amount < 300) | |
(not (research-available ri-champion)) | |
) | |
(goal monk-threat-goal 1) | |
) | |
(food-amount > 580); hussar + lc food cost | |
(gold-amount < 600); hussar gold cost | |
(population < max-civ-pop) | |
(up-research-status c: ri-light-cavalry >= research-pending) | |
(can-train scout-cavalry-line) | |
=> | |
(train scout-cavalry-line) | |
) | |
#end-if | |
#load-if-not-defined AZTEC-CIV | |
#load-if-not-defined BRITON-CIV | |
#load-if-not-defined BYZANTINE-CIV | |
#load-if-not-defined CHINESE-CIV | |
#load-if-not-defined HUN-CIV | |
#load-if-not-defined JAPANESE-CIV | |
#load-if-not-defined KOREAN-CIV | |
#load-if-not-defined MAYAN-CIV | |
#load-if-not-defined MONGOL-CIV | |
#load-if-not-defined SARACEN-CIV | |
#load-if-not-defined SPANISH-CIV | |
#load-if-not-defined TURKISH-CIV | |
#load-if-not-defined VIKING-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-current-age >= ci-transit) | |
(or | |
(gold-amount <= 90) | |
(goal escrow-purpose-goal ri-halberdier) | |
) | |
(food-amount > 200) | |
(wood-amount > 200) | |
(or | |
(unit-type-count spearman-line < 10) | |
(up-research-status c: ri-pikeman >= research-pending) | |
) | |
(nor | |
(up-research-status c: ri-elite-teutonic-knight >= research-pending) | |
(up-research-status c: ri-elite-throwing-axeman >= research-pending) | |
) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control == 2) | |
(wood-amount > 400) | |
(food-amount > 400) | |
(or | |
(dropsite-min-distance gold > 5) | |
(gold-amount < 100) | |
) | |
(nor | |
(up-research-status c: ri-elite-teutonic-knight >= research-pending) | |
(up-research-status c: ri-elite-throwing-axeman >= research-pending) | |
) | |
(can-research-with-escrow ri-pikeman) | |
(strategic-number sn-military-level < 1) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-pikeman) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control < 1) | |
(wood-amount > 300) | |
(food-amount > 175) | |
(population < max-civ-pop) | |
(or | |
(dropsite-min-distance gold > 5) | |
(gold-amount < 100) | |
) | |
(nand | |
(gold-amount > 400) | |
(unit-type-count trade-cart > 20) | |
) | |
(up-research-status c: ri-elite-skirmisher >= research-pending) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control == 2) | |
(wood-amount > 400) | |
(food-amount > 400) | |
(or | |
(dropsite-min-distance gold > 5) | |
(gold-amount < 100) | |
) | |
(up-research-status c: ri-elite-teutonic-knight < research-pending) | |
(strategic-number sn-cavalry-threat > 1) | |
(up-research-status c: ri-pikeman >= research-pending) | |
(population < max-civ-pop) | |
(strategic-number sn-military-level < 1) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control == 2) | |
(wood-amount > 400) | |
(food-amount > 400) | |
(population < max-civ-pop) | |
(or | |
(dropsite-min-distance gold > 5) | |
(gold-amount < 100) | |
) | |
(strategic-number sn-military-level < 1) | |
(up-research-status c: ri-elite-skirmisher >= research-pending) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(wood-amount > 400) | |
(food-amount > 400) | |
(strategic-number sn-cavalry-threat > 1) | |
(up-research-status c: ri-halberdier >= research-pending) | |
(population < del-civ-pop) | |
(goal uu-up-goal 1) | |
(research-available my-unique-unit-upgrade) | |
(strategic-number sn-military-level < 0) | |
(unit-type-count spearman-line < 30) | |
(can-train spearman-line) | |
=> | |
(train spearman-line) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-resource-control <= 2) | |
(wood-amount > 400) | |
(food-amount > 400) | |
(or | |
(and | |
(goal uu-up-goal 1) | |
(research-available my-unique-unit-upgrade) | |
) | |
(and | |
(unit-type-count knight-line > 19) | |
(research-available ri-paladin) | |
) | |
) | |
(population < del-civ-pop) | |
(strategic-number sn-military-level < 0) | |
(up-research-status c: ri-elite-skirmisher >= research-pending) | |
(can-train skirmisher-line) | |
=> | |
(train skirmisher-line) | |
) | |
#load-if-defined DEATH-MATCH | |
#load-if-defined DARK-AGE-START | |
(defrule | |
(current-age <= castle-age) | |
(or (and (strategic-number sn-military-level < 0) | |
(current-age == feudal-age)) | |
(goal ranged-unit-type-goal archer)) | |
(can-train archer-line) | |
=> | |
(train archer-line) | |
) | |
(defrule | |
(unit-type-count militiaman-line > 10) | |
=> | |
(research ri-man-at-arms) | |
(research ri-two-handed-swordsman) | |
(research ri-long-swordsman) | |
) | |
(defrule | |
(strategic-number sn-current-age <= castle); train militias to keep up with dark age militias | |
(or (strategic-number sn-military-level < 0) | |
(current-age <= feudal-age)) | |
(can-train militiaman-line) | |
=> | |
(train militiaman-line) | |
) | |
#end-if | |
#end-if | |
; ********** OTHER RESEARCHES ********** | |
#load-if-defined DIFFICULTY-EASIEST | |
(defrule | |
; (current-age >= imperial-age) | |
(strategic-number sn-resource-control == 2) | |
; (population >= fourty-percent-pop) | |
(population < fourty-percent-pop) | |
=> | |
(set-strategic-number sn-resource-control 0) | |
) | |
#end-if | |
#load-if-defined MONGOL-CIV | |
(defrule | |
(unit-type-count battering-ram-line > 3) | |
(up-research-status c: ri-siege-ram >= research-pending) | |
(can-research my-unique-research) | |
=> | |
(research my-unique-research) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
(strategic-number sn-resource-control < 1) | |
(or | |
(population > del-civ-pop) | |
(goal unit-goal wonder) | |
) | |
(can-research ri-stonecutting) | |
=> | |
(research ri-stonecutting) | |
) | |
#load-if-not-defined WONDER-RACE | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(food-amount < 300) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(can-research ri-ballistics) | |
=> | |
(research ri-ballistics) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or | |
(wood-amount > 800) | |
(food-amount > 800) | |
) | |
(or | |
(current-age-time > 30) | |
(gold-amount < 400) | |
) | |
(can-research-with-escrow ri-guilds) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-guilds) | |
) | |
(defrule | |
(cc-players-unit-type-count 0 stone-mine > 5); stone left on map | |
(or | |
(unit-type-count 124 > 0) | |
(unit-type-count 220 > 0) | |
) | |
(or | |
(strategic-number sn-resource-control < 1) | |
(strategic-number sn-stone-gatherer-percentage > 15) | |
) | |
(strategic-number sn-current-age >= ci-transit) | |
(strategic-number sn-stone-gatherer-percentage > 4) | |
(can-research ri-stone-shaft-mining) | |
=> | |
(research ri-stone-shaft-mining) | |
) | |
(defrule | |
(can-research ri-cartography) | |
=> | |
(research ri-cartography) | |
) | |
(defrule | |
(or (building-type-count-total wonder >= 1) | |
(and (current-age >= imperial-age) | |
(and (population > del-civ-pop) | |
(strategic-number sn-resource-control < 1)))) | |
(can-research ri-treadmill-crane) | |
=> | |
(research ri-treadmill-crane)) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(current-age >= imperial-age) | |
(or | |
(gold-amount < 100) | |
(population > del-civ-pop) | |
) | |
(food-amount > 400) | |
(wood-amount > 400) | |
(can-research ri-masonry) | |
=> | |
(research ri-masonry) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(gold-amount < 100) | |
(population > del-civ-pop) | |
) | |
(food-amount > 400) | |
(wood-amount > 400) | |
(can-research ri-architecture) | |
=> | |
(research ri-architecture) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(gold-amount < 100) | |
(population > del-civ-pop) | |
) | |
(food-amount > 400) | |
(wood-amount > 400) | |
(building-type-count castle >= 2) | |
(can-research ri-hoardings) | |
=> | |
(research ri-hoardings) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(population > del-civ-pop) | |
(can-research ri-siege-engineers) | |
=> | |
(research ri-siege-engineers) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(food-amount > 1200) | |
(current-age-time > 300) | |
(population > del-civ-pop) | |
(can-research ri-town-watch) | |
=> | |
(research ri-town-watch) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(or | |
(town-under-attack) | |
(population > del-civ-pop) | |
) | |
(building-type-count castle > 0) | |
(can-research ri-murder-holes) | |
=> | |
(research ri-murder-holes) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(population > del-civ-pop) | |
(unit-type-count infantry-class > 11) | |
(can-research ri-tracking) | |
=> | |
(research ri-tracking) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 1) | |
(population > del-civ-pop) | |
(building-type-count castle > 0) | |
(can-research ri-bombard-tower) | |
=> | |
(research ri-bombard-tower) | |
) | |
(defrule | |
(strategic-number sn-resource-control == ri-heresy) | |
(can-research-with-escrow ri-heresy) | |
=> | |
(release-escrow gold) | |
(research ri-heresy) | |
) | |
(defrule | |
(strategic-number sn-resource-control < 2) | |
(players-unit-type-count focus-player monk > 19) | |
(can-research-with-escrow ri-faith) | |
=> | |
(release-escrow food)(release-escrow gold) | |
(research ri-faith) | |
) | |
#load-if-not-defined DEFEND-WONDER | |
(defrule | |
(game-time > 300) | |
(building-type-count-total bombard-tower < 6) | |
(game-time < 900); build them defensively early in DM | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(can-build bombard-tower) | |
=> | |
(build bombard-tower) | |
) | |
#else | |
(defrule | |
(game-time > 300) | |
(building-type-count-total bombard-tower < 9) | |
(or (building-type-count-total castle >= 3) | |
(stone-amount >= 700)) | |
(building-type-count-total wonder > 0) | |
(can-build bombard-tower) | |
=> | |
(build bombard-tower) | |
) | |
#end-if | |
#load-if-defined CAPTURE-THE-RELIC | |
(defrule | |
(current-age <= feudal-age) | |
(players-current-age focus-player >= castle-age) | |
(unit-type-count-total 213 < 2) ; Dead female builder | |
(unit-type-count-total 225 < 2) ; Dead male builder | |
(or (unit-type-count-total 134 == 0); dead monk | |
(strategic-number sn-military-level > 0)) | |
(can-build watch-tower) | |
=> | |
(build-forward watch-tower) | |
(disable-self)) | |
(defrule | |
(building-type-count monastery >= 1); (unit-type-count monk >= 1) | |
(unit-type-count-total 213 < 3) ; Dead female builder | |
(unit-type-count-total 225 < 3) ; Dead male builder | |
(or (unit-type-count-total 134 == 0); dead monk | |
(strategic-number sn-military-level > 0)) | |
(can-research ri-bombard-tower) | |
=> | |
(research ri-bombard-tower)) | |
(defrule | |
(or (building-type-count-total bombard-tower < 3) | |
(and (building-type-count-total castle >= 3) | |
(building-type-count-total bombard-tower < 15))) | |
(or (building-type-count-total castle >= 3) | |
(stone-amount >= 700)) | |
(unit-type-count monk >= 1) | |
(unit-type-count-total 213 < 3) ; Dead female builder | |
(unit-type-count-total 225 < 3) ; Dead male builder | |
(or (unit-type-count-total 134 == 0); dead monk | |
(strategic-number sn-military-level > 0)) | |
(can-build bombard-tower) | |
=> | |
(build-forward bombard-tower)) | |
#end-if | |
#load-if-defined KING-OF-THE-HILL | |
(defrule | |
(building-type-count castle > 0) | |
(strategic-number sn-military-level > 0) | |
(can-research ri-bombard-tower) | |
=> | |
(research ri-bombard-tower)) | |
(defrule | |
(or (building-type-count-total bombard-tower < 3) | |
(and (building-type-count-total castle >= 3) | |
(building-type-count-total bombard-tower < 15))) | |
(or (building-type-count-total castle >= 3) | |
(stone-amount >= 700)) | |
(unit-type-count-total 213 < 3) ; Dead female builder | |
(unit-type-count-total 225 < 3) ; Dead male builder | |
(or (strategic-number sn-maximum-town-size >= 40) | |
(strategic-number sn-number-attack-groups > 1)) | |
(strategic-number sn-military-level > 0) | |
(can-build bombard-tower) | |
=> | |
(build-forward bombard-tower)) | |
#end-if | |
#load-if-defined TEUTONIC-CIV | |
(defrule | |
(up-research-status c: ri-hoardings >= research-pending) | |
(building-type-count castle > 1) | |
(can-research my-unique-research) | |
=> | |
(research my-unique-research) | |
) | |
#end-if | |
#load-if-defined TURKISH-CIV | |
(defrule | |
(or | |
(building-type-count bombard-tower > 1) | |
(unit-type-count cannon-galleon-line > 3) | |
) | |
(can-research my-unique-research) | |
=> | |
(research my-unique-research) | |
) | |
#end-if | |
(defrule | |
(current-age == imperial-age) | |
(unit-type-count transport-ship > 0) | |
(strategic-number sn-resource-control <= 1) | |
=> | |
(research ri-padded-archer-armor) | |
(research ri-leather-archer-armor) | |
(research ri-ring-archer-armor) | |
(research ri-chain-mail) | |
(research ri-plate-mail) | |
(research ri-scale-barding) | |
(research ri-chain-barding) | |
(research ri-plate-barding) | |
(research ri-forging) | |
(research ri-iron-casting) | |
(research ri-blast-furnace) | |
) | |
; ********** FARMS/FISHING SHIPs ********** ; Put them at the end for low priority | |
#load-if-not-defined POPULATION-CAP-25 | |
(defrule | |
(strategic-number sn-current-age == df-transit) | |
(or (cc-players-unit-type-count 0 shore-fish >= shorefishreq2); a bit | |
(cc-players-unit-type-count 0 sea-fish >= deepfishreq2)); a bit | |
(or (and (strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(wood-amount >= 385)) | |
(goal strategy-goal flush)) | |
(wood-amount >= 235) | |
(unit-type-count-total fishing-ship < 16) | |
(can-train fishing-ship) | |
=> | |
(train fishing-ship); make more fishing ships during feudal transit on islands | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(or (cc-players-unit-type-count 0 shore-fish >= shorefishreq2); a bit | |
(cc-players-unit-type-count 0 sea-fish >= deepfishreq2)); a bit | |
(or (building-type-count-total lumber-camp > 0) | |
(and (civ-selected persian) | |
(unit-type-count-total fishing-ship < 3))) | |
(unit-type-count-total fishing-ship < 16) | |
(or (dropsite-min-distance wood < 4) | |
(wood-amount >= 120)) | |
(can-train fishing-ship) | |
=> | |
(train fishing-ship) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (unit-type-count-total fishing-ship < 10) | |
(current-age == feudal-age)) | |
(or (cc-players-unit-type-count 0 shore-fish >= shorefishreq2); a bit | |
(cc-players-unit-type-count 0 sea-fish >= deepfishreq2)); a bit | |
(wood-amount >= 225) | |
(game-time < 2100) | |
(dropsite-min-distance wood < 5) | |
(population < max-civ-pop) | |
(unit-type-count revealer == 0); no enemy attacking us | |
(building-type-count-total market > 0) | |
(unit-type-count-total fishing-ship < 16) | |
(can-train fishing-ship) | |
=> | |
(train fishing-ship) | |
) | |
(defrule | |
(strategic-number sn-resource-control <= 2) | |
(or (wood-amount > 200) | |
(food-amount < 150)) | |
(unit-type-count fishing-ship < 8) | |
(population < max-civ-pop) | |
(or (cc-players-unit-type-count 0 shore-fish >= shorefishreq2); a bit | |
(cc-players-unit-type-count 0 sea-fish >= deepfishreq2)); a bit | |
(or (warboat-count >= 20) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed)) | |
(game-time < 2100) | |
(warboat-count > 6) | |
(unit-type-count-total fishing-ship < 16) | |
(can-train fishing-ship) | |
=> | |
(train fishing-ship) | |
) | |
#load-if-defined VIKING-CIV | |
(defrule | |
(current-age == castle-age) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(or (not (unit-available war-galley)) | |
(strategic-number sn-resource-control == ri-bodkin-arrow)) | |
(or (cc-players-unit-type-count 0 shore-fish >= shorefishreq2); a bit | |
(cc-players-unit-type-count 0 sea-fish >= deepfishreq2)); a bit | |
(unit-type-count fishing-ship < 16) | |
(can-train fishing-ship) | |
=> | |
(train fishing-ship) | |
) | |
#end-if | |
#end-if | |
#end-if ; NOT WONDER-RACE | |
; ********** GATHERER PERCENTAGES ********** | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
#load-if-not-defined DEATH-MATCH | |
#load-if-not-defined HUN-CIV | |
(defrule | |
; (strategic-number sn-current-age == dark) | |
(building-type-count-total town-center >= 1) | |
(unit-type-count villager <= 10) | |
(up-pending-objects c: house <= 0) | |
(housing-headroom < 5) | |
(wood-amount < 30) | |
(population < max-civ) | |
(or (strategic-number sn-wood-gatherer-percentage < 33) | |
(strategic-number sn-wood-gatherer-percentage >= 100)) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 33) | |
(set-strategic-number sn-wood-gatherer-percentage 67) | |
(set-strategic-number sn-gold-gatherer-percentage 0) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
; (set-strategic-number sn-cap-civilian-gatherers 1000) | |
(set-strategic-number sn-maximum-wood-drop-distance wood-distance2) | |
) | |
#end-if | |
(defrule | |
; (strategic-number sn-current-age == dark) | |
(building-type-count-total town-center >= 1) | |
(unit-type-count villager <= 8) | |
(or (up-pending-objects c: house >= 1) | |
(or (housing-headroom >= 5) | |
(or (wood-amount >= 30) | |
(population >= max-civ)))) | |
(or (strategic-number sn-food-gatherer-percentage != 96) | |
(strategic-number sn-wood-gatherer-percentage != 4)) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 96) | |
(set-strategic-number sn-wood-gatherer-percentage 4) | |
(set-strategic-number sn-gold-gatherer-percentage 0) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
; (set-strategic-number sn-cap-civilian-gatherers 1000) | |
) | |
#load-if-defined DIFFICULTY-EASIEST | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(civilian-population >= max-civ) | |
(strategic-number sn-wood-gatherer-percentage < 25) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 75) | |
(set-strategic-number sn-wood-gatherer-percentage 25) | |
(set-strategic-number sn-gold-gatherer-percentage 0) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
(set-strategic-number sn-maximum-wood-drop-distance wood-distance2)) | |
#end-if | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 9) | |
(or (up-pending-objects c: house >= 1) | |
(or (housing-headroom >= 3) | |
(or (wood-amount >= 30) | |
(population >= max-civ)))) | |
(strategic-number sn-food-gatherer-percentage != 89) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 89) | |
(set-strategic-number sn-wood-gatherer-percentage 11) | |
(set-strategic-number sn-gold-gatherer-percentage 0) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
(set-strategic-number sn-maximum-wood-drop-distance wood-distance2)) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 10) | |
(or (up-pending-objects c: house >= 1) | |
(or (housing-headroom >= 3) | |
(or (wood-amount >= 30) | |
(population >= max-civ)))) | |
(strategic-number sn-food-gatherer-percentage != 80) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 80) | |
(set-strategic-number sn-wood-gatherer-percentage 20) | |
(set-strategic-number sn-gold-gatherer-percentage 0) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
(set-strategic-number sn-maximum-wood-drop-distance wood-distance2)) | |
(defrule | |
(unit-type-count villager == 11) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 73) | |
(set-strategic-number sn-wood-gatherer-percentage 27) | |
(set-strategic-number sn-maximum-wood-drop-distance wood-distance2) | |
(disable-self) | |
) | |
(defrule | |
(unit-type-count villager == 12) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 67) | |
(set-strategic-number sn-wood-gatherer-percentage 33) | |
(set-strategic-number sn-maximum-wood-drop-distance wood-distance2) | |
(disable-self) | |
) | |
#load-if-not-defined POPULATION-CAP-25 | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 13) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 62) | |
(set-strategic-number sn-wood-gatherer-percentage 38) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 14) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 64) | |
(set-strategic-number sn-wood-gatherer-percentage 36) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 15) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 67) | |
(set-strategic-number sn-wood-gatherer-percentage 33) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 16) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 69) | |
(set-strategic-number sn-wood-gatherer-percentage 31) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 17) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 71) | |
(set-strategic-number sn-wood-gatherer-percentage 29) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 18) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 71) | |
(set-strategic-number sn-wood-gatherer-percentage 29) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 19) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 72) | |
(set-strategic-number sn-wood-gatherer-percentage 28) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 70) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 21) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 67) | |
(set-strategic-number sn-wood-gatherer-percentage 33) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager >= 22) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 64) | |
(set-strategic-number sn-wood-gatherer-percentage 36) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 23) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 65) | |
(set-strategic-number sn-wood-gatherer-percentage 35) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 24) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 67) | |
(set-strategic-number sn-wood-gatherer-percentage 33) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 25) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 68) | |
(set-strategic-number sn-wood-gatherer-percentage 32) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 26) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 69) | |
(set-strategic-number sn-wood-gatherer-percentage 31) | |
) | |
(defrule | |
(strategic-number sn-current-age == dark) | |
(unit-type-count villager == 27) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 70) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
) | |
#end-if ; <= no DM | |
#else; PI => | |
(defrule | |
(unit-type-count villager >= 12) | |
=> | |
(set-strategic-number sn-maximum-food-drop-distance 15) | |
(set-strategic-number sn-maximum-gold-drop-distance 14) | |
(set-strategic-number sn-maximum-stone-drop-distance 14) | |
(set-strategic-number sn-maximum-hunt-drop-distance 24) | |
(set-strategic-number sn-cap-civilian-builders 100) | |
(set-strategic-number sn-cap-civilian-gatherers 100) | |
(disable-self)) | |
#end-if | |
#load-if-defined LOW-RESOURCES-START | |
(defrule | |
(strategic-number sn-current-age == df-transit) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 50) | |
(set-strategic-number sn-wood-gatherer-percentage 38) | |
(set-strategic-number sn-gold-gatherer-percentage 12) | |
) | |
(defrule | |
(strategic-number sn-current-age == df-transit);will overwrite rule above | |
(goal strategy-goal flush) | |
(or | |
(up-compare-goal unit-goal != militiaman-line) | |
(civ-selected gothic) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 60) | |
(set-strategic-number sn-gold-gatherer-percentage 0) | |
) | |
(defrule | |
(strategic-number sn-current-age >= df-transit) | |
(goal strategy-goal sling) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 40) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
) | |
#load-if-defined SARACEN-CIV | |
(defrule | |
(strategic-number sn-current-age == df-transit) | |
(goal strategy-goal rush) | |
(goal control-goal aggressive-rush) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 50) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 0) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(or | |
(and | |
(strategic-number sn-current-age == feudal) | |
(not (goal strategy-goal flush)) | |
) | |
(and | |
(regicide-game) | |
(strategic-number sn-current-age == df-transit) | |
) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 52); testing | |
(set-strategic-number sn-wood-gatherer-percentage 36) | |
(set-strategic-number sn-gold-gatherer-percentage 12) | |
;old (set-strategic-number sn-food-gatherer-percentage 48) | |
;old (set-strategic-number sn-wood-gatherer-percentage 33) | |
;old (set-strategic-number sn-gold-gatherer-percentage 19) | |
) | |
(defrule | |
(strategic-number sn-current-age == df-transit) | |
(or | |
(and | |
(goal enemy-boats-goal 1) | |
(unit-type-count fishing-ship > 4) | |
) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
) | |
(goal strategy-goal flush) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 25) | |
(set-strategic-number sn-wood-gatherer-percentage 70) | |
(set-strategic-number sn-gold-gatherer-percentage 5) | |
) | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal flush) | |
(or | |
(goal unit-goal militiaman-line) | |
(goal unit-goal scout-cavalry) | |
) | |
(building-type-count-total mining-camp > 0) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 45) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
) | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal flush) | |
(or | |
(goal unit-goal militiaman-line) | |
(goal unit-goal scout-cavalry) | |
) | |
(building-type-count-total blacksmith > 0) | |
(building-type-count-total mining-camp > 0) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 55) | |
(set-strategic-number sn-wood-gatherer-percentage 29) | |
(set-strategic-number sn-gold-gatherer-percentage 16) | |
) | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal flush) | |
(or | |
(and | |
(goal unit-goal militiaman-line) | |
(goal enemy-goal flush) | |
) | |
(or | |
(goal unit-goal skirmisher) | |
(strategic-number sn-cavalry-threat > 1) | |
) | |
) | |
(building-type-count-total blacksmith > 0) | |
(building-type-count-total mining-camp > 0) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 48) | |
(set-strategic-number sn-wood-gatherer-percentage 38) | |
(set-strategic-number sn-gold-gatherer-percentage 14) | |
) | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal flush) | |
(strategic-number sn-cavalry-threat > 1) | |
(or | |
(and | |
(or | |
(building-type-count farm < 16) | |
(unit-type-count villager > 41) | |
) | |
(and | |
(building-type-count farm < 20) | |
(unit-type-count villager > 38) | |
) | |
) | |
(building-type-count-total barracks == 0) | |
) | |
(building-type-count-total blacksmith > 0) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 10) | |
) | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal flush) | |
(goal unit-goal archer) | |
(building-type-count-total mining-camp > 0) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 35) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
) | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal flush) | |
(goal unit-goal archer) | |
(building-type-count-total blacksmith > 0) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 45) | |
(set-strategic-number sn-wood-gatherer-percentage 35) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal flush) | |
(building-type-count-total blacksmith > 0) | |
(current-age-time < 400) | |
(goal control-goal belated-flush-defense) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 45) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 5) | |
) | |
#load-if-defined AZTEC-CIV | |
#load-if-not-defined REGICIDE | |
(defrule | |
(building-type-count barracks == 0) | |
(or | |
(strategic-number sn-current-age == df-transit);will overwrite rule above | |
(strategic-number sn-current-age == feudal) | |
) | |
(goal strategy-goal rush) | |
(or | |
(and | |
(goal unit-goal eagle-warrior) | |
(up-compare-goal position-goal == flank) | |
) | |
(goal unit-goal monk) | |
) | |
(up-compare-goal control-goal != shot); shot won't sell stone for additional TCs, so mine more gold | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 50) | |
(set-strategic-number sn-wood-gatherer-percentage 47) | |
(set-strategic-number sn-gold-gatherer-percentage 3) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(or | |
(goal unit-goal my-unique-unit-line) | |
(civ-selected saracen) | |
) | |
(nor | |
(goal strategy-goal flush) | |
(goal strategy-goal sling) | |
) | |
(dropsite-min-distance stone < 6) | |
(stone-amount < 700) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 40) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 5) | |
) | |
(defrule | |
(or | |
(and | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal sling) | |
) | |
(and | |
(strategic-number sn-wood-gatherer-percentage == 100); end of rebuild code | |
(building-type-count town-center > 0); use this in case not other percentages are loaded for some reason. | |
) | |
) | |
(game-time > 1200) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 45) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 5) | |
) | |
#load-if-not-defined SARACEN-CIV | |
(defrule | |
(goal strategy-goal rush) | |
(or | |
(goal unit-goal eagle-warrior) | |
(goal unit-goal monk) | |
) | |
(strategic-number sn-current-age == fc-transit) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 37) | |
(set-strategic-number sn-wood-gatherer-percentage 43) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal unit-goal eagle-warrior) | |
(goal control-goal shot) | |
(strategic-number sn-current-age >= fc-transit) | |
(building-type-count-total town-center < tc-level-three) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 30) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(or | |
(goal strategy-goal rush) | |
(goal strategy-goal boom) | |
) | |
(or | |
(or | |
(goal unit-goal mix) | |
(goal unit-goal skirmisher) | |
) | |
(or | |
(goal unit-goal militiaman-line) | |
(goal unit-goal scorpion) | |
) | |
) | |
(strategic-number sn-current-age == fc-transit) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 42) | |
(set-strategic-number sn-wood-gatherer-percentage 48) | |
(set-strategic-number sn-gold-gatherer-percentage 10) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal strategy-goal boom) | |
(goal unit-goal knight) | |
(strategic-number sn-current-age >= fc-transit) | |
(or | |
(stone-amount >= 100) | |
(dropsite-min-distance stone > 5) | |
) | |
(building-type-count-total town-center < tc-level-three) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 42) | |
(set-strategic-number sn-wood-gatherer-percentage 46) | |
(set-strategic-number sn-gold-gatherer-percentage 12) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
(up-jump-rule 2) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age >= fc-transit) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 48) | |
(set-strategic-number sn-wood-gatherer-percentage 37) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(goal position-goal pocket) | |
(up-compare-goal control-goal != aggressive-rush) | |
(strategic-number sn-current-age >= fc-transit) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 45) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(or | |
(goal unit-goal scout-cavalry) | |
(and | |
(goal unit-goal skirmisher) | |
(goal monk-threat-goal 1) | |
) | |
) | |
(strategic-number sn-current-age >= fc-transit) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 55) | |
(set-strategic-number sn-wood-gatherer-percentage 35) | |
(set-strategic-number sn-gold-gatherer-percentage 10) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(or | |
(and | |
(goal strategy-goal rush) | |
(goal unit-goal cavalry-archer) | |
) | |
(goal strategy-goal flush) | |
) | |
(strategic-number sn-current-age == fc-transit) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 32) | |
(set-strategic-number sn-wood-gatherer-percentage 48) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
(or | |
(goal unit-goal archer) | |
(and | |
(or | |
(civ-selected mayan) | |
(civ-selected aztec) | |
) | |
(goal strategy-goal flush) | |
) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 29) | |
(set-strategic-number sn-wood-gatherer-percentage 42) | |
(set-strategic-number sn-gold-gatherer-percentage 29) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
(nor | |
(goal unit-goal my-unique-unit-line) | |
(goal unit-goal knight) | |
) | |
(goal strategy-goal boom) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 35) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
(goal control-goal aggressive-rush) | |
(goal unit-goal archer) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 23) | |
(set-strategic-number sn-wood-gatherer-percentage 42) | |
(set-strategic-number sn-gold-gatherer-percentage 35) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
#load-if-not-defined HIGH-RESOURCES-START | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(building-type-count-total castle == 0) | |
(goal strategy-goal rush) | |
(goal unit-goal my-unique-unit-line) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 37) | |
(set-strategic-number sn-wood-gatherer-percentage 27) | |
(set-strategic-number sn-gold-gatherer-percentage 6) | |
(set-strategic-number sn-stone-gatherer-percentage 30) | |
) | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(building-type-count-total castle == 0) | |
(goal strategy-goal boom) | |
(goal unit-goal my-unique-unit-line) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 27) | |
(set-strategic-number sn-wood-gatherer-percentage 40) | |
(set-strategic-number sn-gold-gatherer-percentage 3) | |
(set-strategic-number sn-stone-gatherer-percentage 30) | |
) | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(unit-type-count villager > 50) | |
(building-type-count-total castle == 0) | |
(goal unit-goal my-unique-unit-line) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 37) | |
(set-strategic-number sn-wood-gatherer-percentage 27) | |
(set-strategic-number sn-gold-gatherer-percentage 26) | |
(set-strategic-number sn-stone-gatherer-percentage 10) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(goal strategy-goal fast-imp) | |
(nand | |
(and | |
(goal unit-goal eagle-warrior) | |
(goal control-goal shot) | |
) | |
(building-type-count-total town-center < 3) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 45) | |
(set-strategic-number sn-wood-gatherer-percentage 22) | |
(set-strategic-number sn-gold-gatherer-percentage 33) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(strategic-number sn-current-age == ci-transit) | |
(goal strategy-goal fast-imp) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 40) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
#else; => #load-if-defined SARACEN-CIV | |
(defrule | |
(goal unit-goal knight) | |
(goal control-goal aggressive-rush) | |
(building-type-count market > 0) | |
(building-type-count-total stable < 2) | |
(strategic-number sn-current-age >= fc-transit) | |
(game-time < 1800) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 20) | |
(set-strategic-number sn-wood-gatherer-percentage 35) | |
(set-strategic-number sn-gold-gatherer-percentage 22) | |
(set-strategic-number sn-stone-gatherer-percentage 23) | |
) | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(goal unit-goal archer) | |
(goal control-goal aggressive-rush) | |
(building-type-count market > 0) | |
(building-type-count-total archery-range < 3) | |
(unit-type-count villager > 20) | |
(game-time < 1800) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 10) | |
(set-strategic-number sn-wood-gatherer-percentage 45) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 25) | |
) | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(or | |
(and | |
(goal unit-goal monk) | |
(building-type-count-total monastery < 3) | |
) | |
(goal unit-goal scorpion) | |
) | |
(unit-type-count villager > 20) | |
(game-time < 1800) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 20) | |
(set-strategic-number sn-wood-gatherer-percentage 35) | |
(set-strategic-number sn-gold-gatherer-percentage 22) | |
(set-strategic-number sn-stone-gatherer-percentage 23) | |
) | |
(defrule | |
(goal unit-goal monk) | |
(building-type-count-total monastery > 2) | |
(commodity-selling-price stone > 104) | |
(unit-type-count villager > 20) | |
(game-time < 1800) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 25) | |
(set-strategic-number sn-wood-gatherer-percentage 20) | |
(set-strategic-number sn-gold-gatherer-percentage 30) | |
(set-strategic-number sn-stone-gatherer-percentage 25) | |
) | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed) | |
(goal control-goal aggressive-rush) | |
(building-type-count market > 0) | |
(building-type-count-total archery-range < 3) | |
(building-type-count-total stable < 2) | |
(building-type-count-total monastery < 3) | |
(commodity-selling-price stone > 104) | |
(unit-type-count villager > 20) | |
(game-time < 1800) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 10) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 20) | |
) | |
#end-if ; SARACEN-CIV | |
(defrule | |
(game-time < 1800) | |
(strategic-number sn-current-age >= ci-transit) | |
(goal strategy-goal fast-imp) | |
(goal unit-goal gunpowder-class) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 38) | |
(set-strategic-number sn-wood-gatherer-percentage 45) | |
(set-strategic-number sn-gold-gatherer-percentage 17) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(or | |
(building-type-count-total town-center == 1) | |
(goal enemy-fortifications-goal 1) | |
) | |
(strategic-number sn-current-age >= ci-transit) | |
(goal strategy-goal fast-imp) | |
(building-type-count-total archery-range > 2) | |
(goal unit-goal gunpowder-class) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 35) | |
(set-strategic-number sn-wood-gatherer-percentage 35) | |
(set-strategic-number sn-gold-gatherer-percentage 27) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
(goal unit-goal wonder) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 30) | |
(set-strategic-number sn-wood-gatherer-percentage 25) | |
(set-strategic-number sn-gold-gatherer-percentage 35) | |
(set-strategic-number sn-stone-gatherer-percentage 10) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(or | |
(and | |
(goal unit-goal eagle-warrior) | |
(strategic-number sn-cavalry-threat >= 1) | |
) | |
(goal unit-goal mix) | |
) | |
(unit-type-count villager > 20) | |
(building-type-count-total monastery > 0) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 38) | |
(set-strategic-number sn-wood-gatherer-percentage 37) | |
(set-strategic-number sn-gold-gatherer-percentage 25) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(strategic-number sn-current-age >= fc-transit) | |
(goal strategy-goal rush) | |
(goal unit-goal eagle-warrior) | |
(strategic-number sn-cavalry-threat == 0) | |
(building-type-count-total barracks > 2) | |
(or | |
(and | |
(building-type-count-total barracks > 3) | |
(building-type-count-total monastery > 0) | |
) | |
(goal control-goal aggressive-rush) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 34) | |
(set-strategic-number sn-wood-gatherer-percentage 26) | |
(set-strategic-number sn-gold-gatherer-percentage 40) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(or | |
(strategic-number sn-current-age == fc-transit) | |
(and | |
(current-age == castle-age) | |
(current-age-time < 120) | |
) | |
) | |
(goal strategy-goal rush) | |
(goal unit-goal eagle-warrior) | |
(strategic-number sn-cavalry-threat == 0) | |
(building-type-count-total barracks > 2) | |
(goal control-goal aggressive-rush) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 26) | |
(set-strategic-number sn-gold-gatherer-percentage 34) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(strategic-number sn-current-age == fc-transit) | |
(goal unit-goal my-unique-unit-line) | |
(dropsite-min-distance stone < 6) | |
(stone-amount < 700) | |
(building-type-count castle > 0) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 34) | |
(set-strategic-number sn-wood-gatherer-percentage 45) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 6) | |
(research ri-stone-mining); debug, dba and hc are blocked | |
) | |
#load-if-not-defined SARACEN-CIV | |
(defrule | |
(goal strategy-goal rush) | |
(up-compare-goal control-goal != shot) | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(current-age-time < 300) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 50) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal knight) | |
(up-compare-goal control-goal != shot) | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total stable > 1) | |
(building-type-count-total siege-workshop > 0) | |
(game-time < 1500) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 33) | |
(set-strategic-number sn-wood-gatherer-percentage 38) | |
(set-strategic-number sn-gold-gatherer-percentage 29) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center < tc-level-three) | |
(stone-amount >= 100) | |
(goal unit-goal archer) | |
(goal strategy-goal boom) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 30) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal cavalry-archer) | |
(goal control-goal aggressive-rush) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count villager > 20) | |
(building-type-count-total stable < 2) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 27) | |
(set-strategic-number sn-wood-gatherer-percentage 38) | |
(set-strategic-number sn-gold-gatherer-percentage 35) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal cavalry-archer) | |
(goal control-goal aggressive-rush) | |
(strategic-number sn-cavalry-threat > 1) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count villager > 20) | |
(building-type-count-total stable < 2) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 35) | |
(set-strategic-number sn-wood-gatherer-percentage 38) | |
(set-strategic-number sn-gold-gatherer-percentage 27) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal cavalry-archer) | |
(building-type-count-total town-center >= tc-level-two) | |
(building-type-count-total archery-range > 2) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 37) | |
(set-strategic-number sn-wood-gatherer-percentage 35) | |
(set-strategic-number sn-gold-gatherer-percentage 28) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(or (and (goal unit-goal archer) | |
(stone-amount >= 100)) | |
(goal unit-goal scorpion)) | |
(building-type-count-total stable == 0) | |
(strategic-number sn-current-age == castle) | |
(commodity-selling-price stone < 96) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 25) | |
(set-strategic-number sn-wood-gatherer-percentage 45) | |
(set-strategic-number sn-gold-gatherer-percentage 30) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal archer) | |
(building-type-count-total stable == 0) | |
(strategic-number sn-current-age == castle) | |
(stone-amount >= 100) | |
(commodity-selling-price stone < 96) | |
(unit-type-count villager > 20) | |
(or (up-research-status c: ri-pikeman >= research-pending) | |
(up-research-status c: ri-elite-skirmisher >= research-pending)) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 32) | |
(set-strategic-number sn-wood-gatherer-percentage 43) | |
(set-strategic-number sn-gold-gatherer-percentage 25) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(or (goal unit-goal archer) | |
(goal unit-goal mix)) | |
(unit-type-count villager > 20) | |
(strategic-number sn-current-age == castle) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 20) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 30) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(or (goal strategy-goal flush) | |
(goal strategy-goal rush)) | |
(goal unit-goal archer) | |
(building-type-count-total town-center >= tc-level-three) | |
(commodity-selling-price stone < 96) | |
(dropsite-min-distance stone < 5) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 33) | |
(set-strategic-number sn-wood-gatherer-percentage 43) | |
(set-strategic-number sn-gold-gatherer-percentage 22) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(goal strategy-goal flush) | |
(or (goal unit-goal cavalry-archer) | |
(goal unit-goal mix)) | |
(unit-type-count villager > 20) | |
(building-type-count-total town-center >= tc-level-two) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 38) | |
(set-strategic-number sn-wood-gatherer-percentage 37) | |
(set-strategic-number sn-gold-gatherer-percentage 25) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(or (goal strategy-goal flush) | |
(up-research-status c: ri-bodkin-arrow >= research-pending)) | |
(or (goal unit-goal archer) | |
(goal unit-goal cavalry-archer)) | |
(stone-amount < 100) | |
(building-type-count-total town-center < tc-level-three) | |
(strategic-number sn-current-age == castle) | |
(up-compare-goal control-goal != my-unique-unit-line) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 20) | |
(set-strategic-number sn-wood-gatherer-percentage 45) | |
(set-strategic-number sn-gold-gatherer-percentage 30) | |
(set-strategic-number sn-stone-gatherer-percentage 5) | |
) | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(goal strategy-goal flush) | |
(goal unit-goal mix) | |
(or (building-type-count-total town-center >= tc-level-three) | |
(stone-amount < 100)) | |
(dropsite-min-distance stone < 5) | |
(up-compare-goal control-goal != my-unique-unit-line) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 41) | |
(set-strategic-number sn-wood-gatherer-percentage 36) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
#load-if-not-defined CELTIC-CIV | |
(defrule | |
(goal unit-goal skirmisher) | |
(up-compare-goal control-goal != my-unique-unit-line) | |
(strategic-number sn-current-age >= castle) | |
(or (and (building-type-count-total town-center >= tc-level-three) | |
(goal strategy-goal rush)) | |
(stone-amount < 100)) | |
(dropsite-min-distance stone < 5) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 45) | |
(set-strategic-number sn-gold-gatherer-percentage 12) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(goal strategy-goal flush) | |
(goal unit-goal militiaman-line) | |
(building-type-count-total town-center >= tc-level-two) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 45) | |
(set-strategic-number sn-wood-gatherer-percentage 32) | |
(set-strategic-number sn-gold-gatherer-percentage 23) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(goal strategy-goal flush) | |
(goal unit-goal militiaman-line) | |
(stone-amount < 100) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 48) | |
(set-strategic-number sn-wood-gatherer-percentage 25) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
#else | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal skirmisher) | |
(strategic-number sn-current-age >= castle) | |
(building-type-count-total town-center < 3) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 38) | |
(set-strategic-number sn-wood-gatherer-percentage 48) | |
(set-strategic-number sn-gold-gatherer-percentage 14) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(dropsite-min-distance stone < 6) | |
(strategic-number sn-current-age >= castle) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 39) | |
(set-strategic-number sn-wood-gatherer-percentage 45) | |
(set-strategic-number sn-gold-gatherer-percentage 13) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(goal unit-goal militiaman-line) | |
(dropsite-min-distance stone < 6) | |
(strategic-number sn-current-age >= castle) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 45) | |
(set-strategic-number sn-wood-gatherer-percentage 33) | |
(set-strategic-number sn-gold-gatherer-percentage 17) | |
(set-strategic-number sn-stone-gatherer-percentage 5) | |
) | |
#end-if | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal skirmisher) | |
(strategic-number sn-cavalry-threat == 0) | |
(players-unit-type-count every-enemy militiaman-line < 8) | |
(not (goal control-goal my-unique-unit-line)) | |
(strategic-number sn-current-age >= castle) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 42) | |
(set-strategic-number sn-wood-gatherer-percentage 48) | |
(set-strategic-number sn-gold-gatherer-percentage 10) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
#load-if-defined GOTHIC-CIV | |
(defrule | |
(goal strategy-goal flush) | |
(goal unit-goal militiaman-line) | |
(building-type-count-total town-center >= tc-level-three) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 45) | |
(set-strategic-number sn-wood-gatherer-percentage 32) | |
(set-strategic-number sn-gold-gatherer-percentage 18) | |
(set-strategic-number sn-stone-gatherer-percentage 5) | |
) | |
#end-if | |
#load-if-not-defined VIKING-CIV | |
#load-if-not-defined TURKISH-CIV | |
(defrule | |
(not (goal strategy-goal boom)) | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(building-type-count town-center >= tc-level-two) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 42); 42 | |
(set-strategic-number sn-wood-gatherer-percentage 35); 38 | |
(set-strategic-number sn-gold-gatherer-percentage 23) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
#else | |
(defrule | |
(not (goal strategy-goal boom)) | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(building-type-count town-center >= tc-level-two) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 43) | |
(set-strategic-number sn-wood-gatherer-percentage 40) | |
(set-strategic-number sn-gold-gatherer-percentage 17) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(goal strategy-goal boom) | |
(or | |
(goal unit-goal archer) | |
(goal unit-goal scorpion) | |
) | |
(building-type-count-total town-center < 3) | |
(stone-amount < 100); gather stone when TC disrupted | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 23) | |
(set-strategic-number sn-wood-gatherer-percentage 46) | |
(set-strategic-number sn-gold-gatherer-percentage 28) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(goal strategy-goal boom) | |
(goal unit-goal scorpion) | |
(building-type-count-total town-center >= tc-level-three) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 35) | |
(set-strategic-number sn-wood-gatherer-percentage 48) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
(defrule | |
(goal strategy-goal boom) | |
(or | |
(goal unit-goal archer) | |
(and | |
(goal unit-goal scorpion) | |
(up-research-status c: ri-light-cavalry >= research-pending) | |
) | |
) | |
(building-type-count-total town-center >= tc-level-three) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 40) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 5) | |
) | |
(defrule | |
(goal strategy-goal boom) | |
(goal unit-goal archer) | |
(or | |
(building-type-count-total town-center >= tc-level-four) | |
(current-age-time > 300) | |
) | |
(strategic-number sn-current-age >= castle-age) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 37) | |
(set-strategic-number sn-wood-gatherer-percentage 43) | |
(set-strategic-number sn-gold-gatherer-percentage 18) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
(defrule | |
(goal strategy-goal boom) | |
(goal unit-goal archer) | |
(strategic-number sn-current-age >= ci-transit) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 26) | |
(set-strategic-number sn-wood-gatherer-percentage 42) | |
(set-strategic-number sn-gold-gatherer-percentage 30) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
#load-if-defined AZTEC-CIV | |
(defrule | |
(goal strategy-goal fast-imp) | |
(strategic-number sn-current-age >= fc-transit) | |
; (building-type-count-total town-center >= tc-level-three) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 44) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 26) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal strategy-goal boom) | |
(goal unit-goal archer) | |
(building-type-count-total town-center >= tc-level-three) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 46) | |
(set-strategic-number sn-gold-gatherer-percentage 12) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
#end-if | |
#load-if-defined PERSIAN-CIV | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center >= tc-level-four) | |
(dropsite-min-distance stone <= 6) | |
(goal control-goal my-unique-unit-line) | |
(building-type-count-total castle == 0) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 45) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 10) | |
) | |
#end-if | |
#load-if-defined INDIAN-CIV | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center >= tc-level-three) | |
(goal strategy-goal fast-imp) | |
(goal unit-goal gunpowder-class) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 55) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
#end-if | |
#load-if-not-defined TEUTONIC-CIV | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center >= tc-level-three) | |
(building-type-count-total archery-range > 0) | |
(dropsite-min-distance stone <= 6) | |
(goal control-goal my-unique-unit-line) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 35) | |
(set-strategic-number sn-wood-gatherer-percentage 34) | |
(set-strategic-number sn-gold-gatherer-percentage 18) | |
(set-strategic-number sn-stone-gatherer-percentage 13) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone <= 6) | |
(up-research-status c: ri-elite-skirmisher >= research-pending) | |
(goal control-goal my-unique-unit-line) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 37) | |
(set-strategic-number sn-wood-gatherer-percentage 36) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 12) | |
) | |
#end-if | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center >= tc-level-two) | |
(dropsite-min-distance stone <= 6) | |
(goal control-goal my-unique-unit-line) | |
(or(civ-selected frankish)(civ-selected briton)) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 45) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 10) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(goal control-goal shot) | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center >= tc-level-two) | |
(dropsite-min-distance stone <= 6) | |
(unit-type-count villager > 20) | |
(or(civ-selected mongol)(civ-selected chinese)) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 35) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 22) | |
(set-strategic-number sn-stone-gatherer-percentage 13) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age >= castle) | |
(building-type-count-total castle > 0) | |
(goal control-goal my-unique-unit-line) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 42) | |
(set-strategic-number sn-wood-gatherer-percentage 36) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(or | |
(goal unit-goal eagle-warrior) | |
(goal unit-goal militiaman-line) | |
) | |
(strategic-number sn-current-age >= castle) | |
(dropsite-min-distance stone <= 6) | |
(or | |
(building-type-count-total town-center >= tc-level-two) | |
(and | |
(stone-amount < 100) | |
(up-research-status c: ri-pikeman >= research-pending) | |
) | |
) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 38) | |
(set-strategic-number sn-wood-gatherer-percentage 33) | |
(set-strategic-number sn-gold-gatherer-percentage 26) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal eagle-warrior) | |
(or | |
(strategic-number sn-cavalry-threat == 0) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(dropsite-min-distance stone <= 6) | |
(unit-type-count villager > 60) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 33) | |
(set-strategic-number sn-wood-gatherer-percentage 26) | |
(set-strategic-number sn-gold-gatherer-percentage 38) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal eagle-warrior) | |
(strategic-number sn-cavalry-threat == 0) | |
(strategic-number sn-current-age == ci-transit) | |
(building-type-count town-center == 3) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 41) | |
(set-strategic-number sn-wood-gatherer-percentage 26) | |
(set-strategic-number sn-gold-gatherer-percentage 30) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
#load-if-not-defined AZTEC-CIV | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal mix) | |
(building-type-count-total town-center < 3) | |
(stone-amount != 100) | |
(stone-amount != 200) | |
(dropsite-min-distance stone < 5) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 36) | |
(set-strategic-number sn-wood-gatherer-percentage 36) | |
(set-strategic-number sn-gold-gatherer-percentage 25) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
#else | |
(defrule | |
(goal strategy-goal boom) | |
(goal unit-goal eagle-warrior) | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone < 5) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 35) | |
(set-strategic-number sn-wood-gatherer-percentage 47) | |
(set-strategic-number sn-gold-gatherer-percentage 14) | |
(set-strategic-number sn-stone-gatherer-percentage 4) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal mix) | |
(building-type-count-total town-center < 3) | |
(stone-amount != 100) | |
(stone-amount != 200) | |
(dropsite-min-distance stone < 5) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 30) | |
(set-strategic-number sn-wood-gatherer-percentage 34) | |
(set-strategic-number sn-gold-gatherer-percentage 29) | |
(set-strategic-number sn-stone-gatherer-percentage 7) | |
) | |
(defrule | |
(goal unit-goal militiaman-line) | |
(strategic-number sn-current-age >= ci-transit) | |
(game-time < 2400) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 46) | |
(set-strategic-number sn-wood-gatherer-percentage 33) | |
(set-strategic-number sn-gold-gatherer-percentage 19) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
#end-if | |
#load-if-not-defined AZTEC-CIV | |
#load-if-not-defined FRANKISH-CIV | |
#load-if-not-defined GOTHIC-CIV | |
#load-if-not-defined HUN-CIV | |
#load-if-not-defined ITALIAN-CIV | |
#load-if-not-defined MAYAN-CIV | |
#load-if-not-defined SARACEN-CIV | |
(defrule | |
(not (goal unit-goal my-unique-unit-line)) | |
(goal control-goal my-unique-unit-line) | |
(strategic-number sn-current-age >= ci-transit) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage ci-uu-switch-food) | |
(set-strategic-number sn-wood-gatherer-percentage ci-uu-switch-wood) | |
(set-strategic-number sn-gold-gatherer-percentage ci-uu-switch-gold) | |
(set-strategic-number sn-stone-gatherer-percentage ci-uu-switch-stone) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-not-defined BYZANTINE-CIV | |
#load-if-not-defined CELTIC-CIV | |
#load-if-not-defined KOREAN-CIV | |
#load-if-not-defined SLAVIC-CIV | |
(defrule | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone <= 4) | |
(nor (goal unit-goal archer) | |
(goal unit-goal knight)) | |
(goal control-goal my-unique-unit-line) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 41) | |
(set-strategic-number sn-wood-gatherer-percentage 27) | |
(set-strategic-number sn-gold-gatherer-percentage 18) | |
(set-strategic-number sn-stone-gatherer-percentage 14) | |
) | |
#else | |
(defrule | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone <= 4) | |
(goal unit-goal scorpion) | |
(goal control-goal my-unique-unit-line) | |
(building-type-count-total castle >= 0) | |
(unit-type-count villager > 20) | |
(strategic-number sn-current-age >= castle) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 34) | |
(set-strategic-number sn-wood-gatherer-percentage 33) | |
(set-strategic-number sn-gold-gatherer-percentage 27) | |
(set-strategic-number sn-stone-gatherer-percentage 6) | |
) | |
#end-if ;SLAVIC-CIV | |
#else | |
(defrule | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone <= 4) | |
(goal control-goal my-unique-unit-line) | |
(or | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total castle == 0) | |
) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 37) | |
(set-strategic-number sn-wood-gatherer-percentage 39) | |
(set-strategic-number sn-gold-gatherer-percentage 16) | |
(set-strategic-number sn-stone-gatherer-percentage 10) | |
) | |
#end-if ;KOREAN-CIV | |
#else | |
(defrule | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone <= 4) | |
(goal control-goal my-unique-unit-line) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 36) | |
(set-strategic-number sn-wood-gatherer-percentage 39) | |
(set-strategic-number sn-gold-gatherer-percentage 12) | |
(set-strategic-number sn-stone-gatherer-percentage 13) | |
) | |
#end-if ;CELTIC-CIV | |
#else | |
(defrule | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone <= 4) | |
(goal control-goal my-unique-unit-line) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 35) | |
(set-strategic-number sn-wood-gatherer-percentage 37) | |
(set-strategic-number sn-gold-gatherer-percentage 13) | |
(set-strategic-number sn-stone-gatherer-percentage 15) | |
) | |
(defrule | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone <= 4) | |
(goal control-goal my-unique-unit-line) | |
(strategic-number sn-current-age == castle) | |
(goal enemy-goal skirmisher) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 39) | |
(set-strategic-number sn-wood-gatherer-percentage 41) | |
(set-strategic-number sn-gold-gatherer-percentage 5) | |
(set-strategic-number sn-stone-gatherer-percentage 15) | |
) | |
(defrule | |
(goal position-point pocket) | |
(building-type-count stone-wall-line > 5) | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone <= 4) | |
(goal control-goal my-unique-unit-line) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 39) | |
(set-strategic-number sn-wood-gatherer-percentage 41) | |
(set-strategic-number sn-gold-gatherer-percentage 12) | |
(set-strategic-number sn-stone-gatherer-percentage 8) | |
) | |
#end-if ;BYZANTINE-CIV | |
#load-if-not-defined KOREAN-CIV | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total castle == 1) | |
(goal unit-goal my-unique-unit-line) | |
(unit-type-count villager > 20) | |
(nand | |
(wood-amount > 300) | |
(stone-amount < 100) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 30) | |
(set-strategic-number sn-wood-gatherer-percentage 45) | |
(set-strategic-number sn-gold-gatherer-percentage 18) | |
(set-strategic-number sn-stone-gatherer-percentage 7) | |
) | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center >= tc-level-three);3 | |
(building-type-count-total castle == 1) | |
(goal unit-goal my-unique-unit-line) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 31) | |
(set-strategic-number sn-wood-gatherer-percentage 37) | |
(set-strategic-number sn-gold-gatherer-percentage 24) | |
(set-strategic-number sn-stone-gatherer-percentage 8) | |
) | |
#else | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total castle == 1) | |
(goal unit-goal my-unique-unit-line) | |
(unit-type-count villager > 20) | |
(nand | |
(wood-amount > 300) | |
(stone-amount < 100) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 31) | |
(set-strategic-number sn-wood-gatherer-percentage 52) | |
(set-strategic-number sn-gold-gatherer-percentage 13) | |
(set-strategic-number sn-stone-gatherer-percentage 4) | |
) | |
#end-if | |
(defrule | |
(building-type-count-total castle == 1) | |
(goal control-goal shot) | |
(goal unit-goal my-unique-unit-line) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 45) | |
(set-strategic-number sn-wood-gatherer-percentage 20) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 13) | |
) | |
#load-if-not-defined BRITON-CIV | |
#load-if-not-defined CHINESE-CIV | |
#load-if-not-defined KOREAN-CIV | |
#load-if-not-defined MAYAN-CIV | |
#load-if-not-defined MONGOL-CIV | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(goal unit-goal my-unique-unit-line) | |
(goal strategy-goal boom) | |
(dropsite-min-distance stone < 6) | |
(stone-amount < 600) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 15) | |
) | |
#load-if-not-defined TEUTONIC-CIV | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center >= tc-level-two) | |
(building-type-count-total castle >= 1) | |
(goal unit-goal my-unique-unit-line) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 50) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 17) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center >= tc-level-two) | |
(building-type-count-total castle >= 1) | |
(goal unit-goal my-unique-unit-line) | |
(unit-type-count villager > 20) | |
(current-age-time > 420) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 48) | |
(set-strategic-number sn-wood-gatherer-percentage 34) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
#load-if-defined SLAVIC-CIV | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center >= tc-level-two) | |
(goal unit-goal my-unique-unit-line) | |
(unit-type-count villager > 100) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 42) | |
(set-strategic-number sn-wood-gatherer-percentage 34) | |
(set-strategic-number sn-gold-gatherer-percentage 21) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#else | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center >= tc-level-five) | |
(unit-type-count villager > 20) | |
(civilian-population < max-civ) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 45) | |
(set-strategic-number sn-wood-gatherer-percentage 35) | |
(set-strategic-number sn-gold-gatherer-percentage 16) | |
(set-strategic-number sn-stone-gatherer-percentage 4) | |
) | |
#end-if | |
(defrule | |
(goal unit-goal my-unique-unit-line) | |
(building-type-count-total castle > 1) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage uu-food2) | |
(set-strategic-number sn-wood-gatherer-percentage uu-wood2) | |
(set-strategic-number sn-gold-gatherer-percentage uu-gold2) | |
(set-strategic-number sn-stone-gatherer-percentage uu-stone2) | |
) | |
#load-if-defined CELTIC-CIV | |
(defrule | |
(or | |
(up-research-status c: my-unique-unit-upgrade >= research-pending) | |
(up-research-status c: ri-champion >= research-pending) | |
) | |
(up-research-status c: ri-halberdier >= research-pending) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 36) | |
(set-strategic-number sn-wood-gatherer-percentage 40) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 4) | |
) | |
#end-if | |
(defrule | |
(current-age == castle-age) | |
(goal unit-goal my-unique-unit-line) | |
(building-type-count-total castle > 1) | |
(unit-type-count villager > 20) | |
(or | |
(or | |
(civ-selected byzantine) | |
(civ-selected spanish) | |
) | |
(or | |
(civ-selected japanese) | |
(civ-selected gothic) | |
) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 45) | |
(set-strategic-number sn-wood-gatherer-percentage 27) | |
(set-strategic-number sn-gold-gatherer-percentage 25) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
#load-if-defined BYZANTINE-CIV | |
(defrule | |
(not (goal strategy-goal boom)) | |
(goal uu-up-goal 1) | |
(goal unit-goal my-unique-unit-line) | |
(building-type-count-total castle > 1) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 44) | |
(set-strategic-number sn-wood-gatherer-percentage 28) | |
(set-strategic-number sn-gold-gatherer-percentage 25) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(goal strategy-goal boom) | |
(strategic-number sn-current-age == ci-transit) | |
(goal unit-goal my-unique-unit-line) | |
(building-type-count-total castle > 1) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 24) | |
(set-strategic-number sn-wood-gatherer-percentage 48) | |
(set-strategic-number sn-gold-gatherer-percentage 25) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
#end-if | |
#load-if-not-defined TEUTONIC-CIV | |
#load-if-not-defined HUN-CIV | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(dropsite-min-distance stone <= 6) | |
(or | |
(building-type-count-total town-center >= tc-level-three) | |
(stone-amount < 100) | |
) | |
(not (goal control-goal my-unique-unit-line)) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 44) | |
(set-strategic-number sn-wood-gatherer-percentage 33) | |
(set-strategic-number sn-gold-gatherer-percentage 19) | |
(set-strategic-number sn-stone-gatherer-percentage 4) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(building-type-count-total town-center == 2) | |
(unit-type-count-total 970 > 2); monk | |
(unit-type-count villager > 20) | |
(stone-amount >= 100) | |
(nor | |
(goal enemy-goal eagle-warrior) | |
(civ-selected viking) | |
) | |
(goal anti-cavalry-threat-goal 0) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 47) | |
(set-strategic-number sn-wood-gatherer-percentage 36) | |
(set-strategic-number sn-gold-gatherer-percentage 17) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(dropsite-min-distance stone <= 6) | |
(building-type-count-total town-center >= tc-level-three) | |
(up-research-status c: ri-crossbow < research-pending) | |
(goal control-goal my-unique-unit-line) | |
(unit-type-count villager > 20) | |
(civilian-population < 100) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 48) | |
(set-strategic-number sn-wood-gatherer-percentage 34) | |
(set-strategic-number sn-gold-gatherer-percentage 16) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
(defrule | |
(goal strategy-goal boom) | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(dropsite-min-distance stone <= 6) | |
(building-type-count-total town-center >= tc-level-three) | |
(building-type-count-total town-center < tc-level-five) | |
(unit-type-count villager > 20) | |
(civilian-population < 100) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 47) | |
(set-strategic-number sn-wood-gatherer-percentage 39) | |
(set-strategic-number sn-gold-gatherer-percentage 12) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
#load-if-defined UP-2-PLAYER-GAME | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(or | |
(building-type-count-total town-center >= tc-level-three) | |
(goal strategy-goal flush) | |
) | |
(not (goal control-goal my-unique-unit-line)) | |
(unit-type-count villager > 20) | |
(strategic-number sn-military-level < 0) | |
(current-age-time < 600) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 46) | |
(set-strategic-number sn-wood-gatherer-percentage 35) | |
(set-strategic-number sn-gold-gatherer-percentage 19) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(goal strategy-goal flush) | |
(stone-amount < 100) | |
(building-type-count-total town-center < tc-level-three) | |
(not (goal control-goal my-unique-unit-line)) | |
(unit-type-count villager > 20) | |
(current-age-time < 600) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 44) | |
(set-strategic-number sn-wood-gatherer-percentage 35) | |
(set-strategic-number sn-gold-gatherer-percentage 18) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(civilian-population >= max-civ) | |
(not (goal control-goal my-unique-unit-line)) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 41) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 26) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
#else | |
#load-if-not-defined UP-POCKET-POSITION | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count-total villager > 100) | |
(not (goal control-goal my-unique-unit-line)) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 44) | |
(set-strategic-number sn-wood-gatherer-percentage 26) | |
(set-strategic-number sn-gold-gatherer-percentage 28) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
#else | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count-total villager > 100) | |
(research-available imperial-age) | |
(not (goal control-goal my-unique-unit-line)) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 24) | |
(set-strategic-number sn-gold-gatherer-percentage 34) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(or | |
(game-time > 2400) | |
(strategic-number sn-current-age >= ci-transit) | |
) | |
(goal unit-goal knight) | |
(up-compare-goal ranged-unit-type-goal != cavalry-archer) | |
(up-compare-goal control-goal != my-unique-unit-line) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 41) | |
(set-strategic-number sn-wood-gatherer-percentage 27) | |
(set-strategic-number sn-gold-gatherer-percentage 30) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
#else | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(dropsite-min-distance stone <= 6) | |
(stone-amount < 100) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 44) | |
(set-strategic-number sn-wood-gatherer-percentage 32) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 4) | |
) | |
#end-if | |
#else | |
(defrule | |
(goal strategy-goal boom) | |
(building-type-count-total town-center >= tc-level-two) | |
(building-type-count-total castle > 0) | |
(goal unit-goal my-unique-unit-line) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 53) | |
(set-strategic-number sn-wood-gatherer-percentage 24) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(or | |
(building-type-count-total town-center == tc-level-three) | |
(stone-amount < 100) | |
) | |
(dropsite-min-distance stone <= 4) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count villager > 20) | |
(strategic-number sn-stone-gatherer-percentage < 10); if we started gathering stone don't stop or keep retasking | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 50) | |
(set-strategic-number sn-wood-gatherer-percentage 27) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(building-type-count-total town-center == tc-level-three) | |
(building-type-count-total barracks > 1) | |
(up-research-status c: ri-pikeman >= research-pending) | |
(dropsite-min-distance stone <= 4) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count villager > 20) | |
(strategic-number sn-stone-gatherer-percentage < 10) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 50) | |
(set-strategic-number sn-wood-gatherer-percentage 32) | |
(set-strategic-number sn-gold-gatherer-percentage 15) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(building-type-count-total town-center >= tc-level-four) | |
(dropsite-min-distance stone <= 4) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count villager > 20) | |
(strategic-number sn-stone-gatherer-percentage < 10) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 48) | |
(set-strategic-number sn-wood-gatherer-percentage 27) | |
(set-strategic-number sn-gold-gatherer-percentage 23) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
(defrule | |
(dropsite-min-distance stone <= 4) | |
(strategic-number sn-current-age >= castle) | |
(or | |
(building-type-count-total castle > 0) | |
(strategic-number sn-stone-gatherer-percentage < 10) | |
) | |
(civilian-population >= max-civ-pop) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 28) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
(defrule | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone <= 4) | |
(strategic-number sn-archer-threat < 3) | |
(goal anti-cavalry-threat-goal 1) | |
(up-research-status c: ri-heavy-scorpion < research-pending) | |
(unit-type-count villager > 20) | |
(goal unit-goal knight) | |
(nand | |
(goal strategy-goal boom); better boom as pocket and go hscorps later | |
(goal position-goal pocket) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 44) | |
(set-strategic-number sn-wood-gatherer-percentage 25) | |
(set-strategic-number sn-gold-gatherer-percentage 21) | |
(set-strategic-number sn-stone-gatherer-percentage 10) | |
) | |
#end-if ;teutonic civ | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal cavalry-archer) | |
(goal control-goal aggressive-rush) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count villager > 20) | |
(building-type-count-total stable < 2) | |
(building-type-count-total archery-range > 3) | |
(strategic-number sn-cavalry-threat < 2) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 24) | |
(set-strategic-number sn-wood-gatherer-percentage 38) | |
(set-strategic-number sn-gold-gatherer-percentage 38) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal strategy-goal rush) | |
(goal unit-goal cavalry-archer) | |
(goal control-goal aggressive-rush) | |
(strategic-number sn-current-age == castle) | |
(unit-type-count villager > 20) | |
(building-type-count-total stable < 2) | |
(building-type-count-total archery-range > 3) | |
(or | |
(strategic-number sn-cavalry-threat > 1) | |
(up-research-status c: ri-elite-skirmisher >= research-pending) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 38) | |
(set-strategic-number sn-wood-gatherer-percentage 38) | |
(set-strategic-number sn-gold-gatherer-percentage 24) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
#load-if-defined UP-2-PLAYER-GAME | |
#load-if-not-defined TEUTONIC-CIV | |
(defrule | |
(goal unit-goal knight) | |
(strategic-number sn-current-age == castle) | |
(game-time < 1800) | |
(unit-type-count villager > 20) | |
(goal monk-threat-goal 1) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 58); too much food actually, but we want early light cavalry | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 12) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(goal strategy-goal boom) | |
(goal unit-goal knight) | |
(unit-type-count villager > 20) | |
(or | |
(strategic-number sn-archer-threat > 0) | |
(building-type-count-total stone-wall-line > 10) | |
) | |
(building-type-count-total siege-workshop == 0); get a siege work shop early in arena | |
(unit-type-count 980 == 0); still no stone gatherers, so keep percentage from castle transit | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 42) | |
(set-strategic-number sn-wood-gatherer-percentage 48) | |
(set-strategic-number sn-gold-gatherer-percentage 10) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
#end-if | |
(defrule | |
(goal unit-goal cavalry-archer) | |
(strategic-number sn-current-age == castle) | |
(dropsite-min-distance stone <= 6) | |
(or | |
(building-type-count-total town-center >= tc-level-three) | |
(stone-amount < 100) | |
) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 42) | |
(set-strategic-number sn-wood-gatherer-percentage 34) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 4) | |
) | |
(defrule | |
(goal unit-goal cavalry-archer) | |
(strategic-number sn-current-age == castle) | |
(building-type-count stable > 1) | |
(dropsite-min-distance stone <= 6) | |
(or | |
(building-type-count-total town-center >= tc-level-three) | |
(stone-amount < 100) | |
) | |
(goal enemy-goal eagle-warrior) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 47) | |
(set-strategic-number sn-wood-gatherer-percentage 27) | |
(set-strategic-number sn-gold-gatherer-percentage 24) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
(defrule | |
(goal unit-goal cavalry-archer) | |
(unit-type-count villager > 95) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 36) | |
(set-strategic-number sn-wood-gatherer-percentage 32) | |
(set-strategic-number sn-gold-gatherer-percentage 29) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(goal unit-goal cavalry-archer) | |
(unit-type-count villager > 95) | |
(building-type-count-total castle > 0) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 38) | |
(set-strategic-number sn-wood-gatherer-percentage 33) | |
(set-strategic-number sn-gold-gatherer-percentage 29) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
#load-if-defined TURKISH-CIV | |
(defrule | |
(unit-type-count villager > 95) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 44) | |
(set-strategic-number sn-wood-gatherer-percentage 26) | |
(set-strategic-number sn-gold-gatherer-percentage 28) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
(goal control-goal shot) | |
(building-type-count-total town-center >= tc-level-three) | |
(dropsite-min-distance stone <= 6) | |
(unit-type-count villager > 20) | |
(building-type-count-total castle == 0) | |
(or | |
(goal unit-goal knight) | |
(up-research-status c: ri-elite-eagle-warrior >= research-pending) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 35) | |
(set-strategic-number sn-wood-gatherer-percentage 35) | |
(set-strategic-number sn-gold-gatherer-percentage 25) | |
(set-strategic-number sn-stone-gatherer-percentage 5) | |
) | |
#load-if-defined SPANISH-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal flush) | |
(gold-amount > 170) | |
(building-type-count blacksmith > 0) | |
=> | |
(set-strategic-number sn-food-modifier-percentage 4) | |
(set-strategic-number sn-wood-modifier-percentage 3) | |
(set-strategic-number sn-gold-modifier-percentage -7); don't go for archers with the spanish | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(goal strategy-goal sling) | |
(or | |
(players-civ any-ally aztec) | |
(or | |
(players-civ any-ally mayan) | |
(players-civ any-ally slavic) | |
) | |
) | |
(players-current-age any-ally == imperial-age) | |
(players-building-type-count every-ally castle < 1) | |
=> | |
(set-strategic-number sn-food-modifier-percentage -7) | |
(set-strategic-number sn-stone-modifier-percentage 7) | |
) | |
(defrule | |
(current-age == castle-age) | |
(research-available imperial-age) | |
(food-amount >= 700) | |
(gold-amount < 200) | |
=> | |
(set-strategic-number sn-food-modifier-percentage -7) | |
(set-strategic-number sn-gold-modifier-percentage 7) | |
) | |
(defrule | |
(current-age >= castle-age) | |
(unit-type-count villager > 85) | |
(unit-type-count fishing-ship > 4) | |
(food-amount > 600) | |
(wood-amount < 200) | |
=> | |
(set-strategic-number sn-food-modifier-percentage -5) | |
(set-strategic-number sn-wood-modifier-percentage 5) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(players-building-type-count any-enemy watch-tower > 4) | |
(game-time < 1800) | |
(current-age >= castle-age) | |
(strategic-number sn-gold-gatherer-percentage > 19) | |
(not (player-in-game any-ally)) | |
=> | |
(set-strategic-number sn-wood-modifier-percentage 10) | |
(set-strategic-number sn-gold-modifier-percentage -10) | |
) | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
(building-type-count-total castle == 0) | |
(or | |
(or | |
(goal enemy-fortifications-goal 1) | |
(players-building-type-count any-enemy castle > 0) | |
) | |
(or | |
(population-cap < 100) | |
(civ-selected magyar) | |
) | |
) | |
(strategic-number sn-stone-gatherer-percentage == 0) | |
=> | |
(set-strategic-number sn-food-modifier-percentage -3) | |
(set-strategic-number sn-wood-modifier-percentage -3) | |
(set-strategic-number sn-stone-modifier-percentage 6) | |
) | |
(defrule | |
(building-type-count-total town-center < 2) | |
(building-type-count-total dock > 0) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed) | |
(strategic-number sn-current-age == castle) | |
(stone-amount > 100) | |
(not(goal unit-goal my-unique-unit-line)) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 30) | |
(set-strategic-number sn-wood-gatherer-percentage 48) | |
(set-strategic-number sn-gold-gatherer-percentage 22) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(or | |
(not (research-available imperial-age)) | |
(stone-amount < 100) | |
) | |
(not(goal unit-goal my-unique-unit-line)) | |
(building-type-count-total dock > 0) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed) | |
(strategic-number sn-current-age == castle) | |
(dropsite-min-distance stone < 6) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 30) | |
(set-strategic-number sn-wood-gatherer-percentage 47) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(or | |
(strategic-number sn-current-age == df-transit) | |
(and | |
(strategic-number sn-current-age == feudal) | |
(not (civ-selected viking)) | |
) | |
) | |
(up-compare-goal strategy-goal != boom) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 57) | |
(set-strategic-number sn-wood-gatherer-percentage 43) | |
(set-strategic-number sn-gold-gatherer-percentage 0) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(strategic-number sn-current-age == feudal) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(or | |
(civ-selected viking) | |
(goal strategy-goal flush) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 30) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(current-age < imperial-age) | |
(strategic-number sn-current-age >= fc-transit) | |
(or | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(and | |
(building-type-count dock > 1) | |
(current-age-time < 420) | |
) | |
) | |
(nand | |
(goal unit-goal my-unique-unit-line) | |
(building-type-count castle == 0) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 20) | |
(set-strategic-number sn-wood-gatherer-percentage 60) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(current-age < imperial-age) | |
(strategic-number sn-current-age >= fc-transit) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(unit-type-count fishing-ship > 11) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 0) | |
(set-strategic-number sn-wood-gatherer-percentage 67) | |
(set-strategic-number sn-gold-gatherer-percentage 33) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(current-age == castle-age) | |
(current-age-time > 180) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(civilian-population < 61) | |
(dropsite-min-distance stone <= 6) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 12) | |
(set-strategic-number sn-wood-gatherer-percentage 57) | |
(set-strategic-number sn-gold-gatherer-percentage 28) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(civilian-population > 60) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(unit-type-count-total trade-cart > 10) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 18) | |
(set-strategic-number sn-wood-gatherer-percentage 53) | |
(set-strategic-number sn-gold-gatherer-percentage 26) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
#load-if-not-defined VIKING-CIV | |
(defrule | |
(civilian-population > 60) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(unit-type-count-total trade-cart < 11) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 16) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 31) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
#else | |
(defrule | |
(civilian-population > 60) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(unit-type-count-total trade-cart < 11) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 21) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 26) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
#end-if | |
(defrule | |
(or | |
(strategic-number sn-current-age == df-transit) | |
(strategic-number current-age == feudal) | |
) | |
(goal strategy-goal flush) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(or (cc-players-unit-type-count 0 shore-fish >= shorefishreq2); a bit | |
(cc-players-unit-type-count 0 sea-fish >= deepfishreq2)); a bit | |
(unit-type-count fishing-ship > 1) | |
=> | |
(up-modify-sn sn-food-gatherer-percentage c:- 6); provisory | |
(up-modify-sn sn-wood-gatherer-percentage c:+ 6) | |
) | |
#load-if-not-defined KOREAN-CIV | |
(defrule | |
(game-time >= 3600) | |
(unit-type-count female-gold-miner == 0); no gold miners | |
(unit-type-count male-gold-miner == 0) | |
(unit-type-count-total 229 == 0); no dead miners so enemy didn't kill them | |
(unit-type-count-total 221 == 0); so there's no gold available | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 48) | |
(set-strategic-number sn-wood-gatherer-percentage 45) | |
(set-strategic-number sn-gold-gatherer-percentage 2) | |
(set-strategic-number sn-stone-gatherer-percentage 5) | |
) | |
(defrule | |
(game-time >= 3600) | |
(unit-type-count female-gold-miner == 0); no gold miners | |
(unit-type-count male-gold-miner == 0) | |
(unit-type-count-total 229 == 0); no dead miners so enemy didn't kill them | |
(unit-type-count-total 221 == 0); so there's no gold available | |
(or | |
(up-research-status c: ri-champion >= research-pending) | |
(and | |
(up-research-status c: ri-light-cavalry >= research-pending) | |
(up-research-status c: ri-bloodlines >= research-pending) | |
) | |
) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 55) | |
(set-strategic-number sn-wood-gatherer-percentage 38) | |
(set-strategic-number sn-gold-gatherer-percentage 2) | |
(set-strategic-number sn-stone-gatherer-percentage 5) | |
) | |
#end-if | |
#load-if-defined DEATH-MATCH | |
#load-if-not-defined CELTIC-CIV | |
(defrule | |
(civilian-population < max-civ) | |
(wood-amount > 1500) | |
=> | |
(set-strategic-number sn-wood-gatherer-percentage 0) | |
(set-strategic-number sn-food-gatherer-percentage 70) | |
(set-strategic-number sn-gold-gatherer-percentage 30) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(civilian-population < max-civ) | |
(wood-amount < 500) | |
=> | |
(set-strategic-number sn-wood-gatherer-percentage 25) | |
(set-strategic-number sn-food-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 20) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
#end-if | |
#end-if | |
#load-if-defined SARACEN-CIV | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(commodity-buying-price food < 136) | |
(commodity-selling-price stone > 95) | |
(building-type-count market > 0) | |
(dropsite-min-distance stone < 6) | |
(goal unit-goal knight) | |
(game-time < 1800) | |
(building-type-count-total stable > 1) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 16) | |
(set-strategic-number sn-wood-gatherer-percentage 14) | |
(set-strategic-number sn-gold-gatherer-percentage 35) | |
(set-strategic-number sn-stone-gatherer-percentage 35) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(commodity-selling-price stone > 95) | |
(building-type-count market > 0) | |
(dropsite-min-distance stone < 6) | |
(goal strategy-goal rush) | |
(goal unit-goal archer) | |
(game-time < 1800) | |
(building-type-count-total archery-range > 2) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 10) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 30) | |
(set-strategic-number sn-stone-gatherer-percentage 30) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal strategy-goal rush) | |
(goal unit-goal monk) | |
(current-age == castle-age) | |
(commodity-selling-price stone < 105) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 28) | |
(set-strategic-number sn-wood-gatherer-percentage 28) | |
(set-strategic-number sn-gold-gatherer-percentage 44) | |
(set-strategic-number sn-stone-gatherer-percentage 0) | |
) | |
(defrule | |
(goal unit-goal monk) | |
(strategic-number sn-current-age >= ci-transit) | |
(building-type-count-total castle > 0) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 28) | |
(set-strategic-number sn-wood-gatherer-percentage 28) | |
(set-strategic-number sn-gold-gatherer-percentage 42) | |
(set-strategic-number sn-stone-gatherer-percentage 2) | |
) | |
(defrule | |
(goal unit-goal monk) | |
(strategic-number sn-current-age >= ci-transit) | |
(building-type-count-total castle == 0) | |
(unit-type-count villager > 20) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 20) | |
(set-strategic-number sn-wood-gatherer-percentage 27) | |
(set-strategic-number sn-gold-gatherer-percentage 40) | |
(set-strategic-number sn-stone-gatherer-percentage 13) | |
) | |
(defrule | |
(strategic-number sn-current-age == castle) | |
(goal unit-goal wonder) | |
=> | |
(set-goal train-civ-goal wonder) | |
(set-strategic-number sn-food-gatherer-percentage 25) | |
(set-strategic-number sn-wood-gatherer-percentage 20) | |
(set-strategic-number sn-gold-gatherer-percentage 45) | |
(set-strategic-number sn-stone-gatherer-percentage 10) | |
) | |
(defrule | |
(strategic-number sn-current-age >= ci-transit) | |
(goal unit-goal wonder) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 0) | |
(set-strategic-number sn-wood-gatherer-percentage 30) | |
(set-strategic-number sn-gold-gatherer-percentage 40) | |
(set-strategic-number sn-stone-gatherer-percentage 30) | |
(set-strategic-number sn-wood-dropsite-distance 3) | |
) | |
#load-if-defined DEFEND-WONDER | |
(defrule | |
(unit-type-count-total villager < twenty-five-percent-pop) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 60) | |
(set-strategic-number sn-wood-gatherer-percentage 33) | |
(set-strategic-number sn-gold-gatherer-percentage 5) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
#load-if-not-defined INCAN-CIV | |
#load-if-not-defined INDIAN-CIV | |
#load-if-not-defined MAGYAR-CIV | |
#load-if-not-defined SLAVIC-CIV | |
#load-if-not-defined AZTEC-CIV | |
#load-if-not-defined CELTIC-CIV | |
#load-if-not-defined FRANKISH-CIV | |
#load-if-not-defined GOTHIC-CIV | |
#load-if-not-defined HUN-CIV | |
#load-if-not-defined JAPANESE-CIV | |
#load-if-not-defined PERSIAN-CIV | |
#load-if-not-defined SARACEN-CIV | |
#load-if-not-defined SPANISH-CIV | |
#load-if-not-defined TEUTONIC-CIV | |
#load-if-not-defined TURKISH-CIV | |
#load-if-not-defined VIKING-CIV | |
(defrule | |
(unit-type-count-total villager < twenty-five-percent-pop) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 40) | |
(set-strategic-number sn-wood-gatherer-percentage 50) | |
(set-strategic-number sn-gold-gatherer-percentage 8) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#end-if | |
#load-if-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(timer-triggered one-minute-timer) | |
(food-amount < 2500) | |
(or | |
(food-amount < 1500) | |
(unit-type-count-total villager < fourty-percent-pop) | |
) | |
(wood-amount > 1500) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 50) | |
(set-strategic-number sn-wood-gatherer-percentage 10) | |
(set-strategic-number sn-gold-gatherer-percentage 35) | |
(set-strategic-number sn-stone-gatherer-percentage 5) | |
) | |
(defrule | |
(timer-triggered one-minute-timer) | |
(food-amount < 1500) | |
(wood-amount < 1500) | |
(unit-type-count-total villager >= fourty-percent-pop) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage pidm-food2) | |
(set-strategic-number sn-wood-gatherer-percentage pidm-wood2) | |
(set-strategic-number sn-gold-gatherer-percentage pidm-gold2) | |
(set-strategic-number sn-stone-gatherer-percentage pidm-stone2) | |
) | |
(defrule | |
(timer-triggered one-minute-timer) | |
(food-amount < 1500) | |
(wood-amount < 1500) | |
(unit-type-count-total villager < fourty-percent-pop) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 47) | |
(set-strategic-number sn-wood-gatherer-percentage 25) | |
(set-strategic-number sn-gold-gatherer-percentage 25) | |
(set-strategic-number sn-stone-gatherer-percentage 3) | |
) | |
(defrule | |
(timer-triggered one-minute-timer) | |
(food-amount > 1500) | |
(wood-amount < 1500) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 14) | |
(set-strategic-number sn-wood-gatherer-percentage 40) | |
(set-strategic-number sn-gold-gatherer-percentage 41) | |
(set-strategic-number sn-stone-gatherer-percentage 5) | |
) | |
(defrule | |
(timer-triggered one-minute-timer) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(food-amount > 1500) | |
(wood-amount > 1500) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage pidm-food) | |
(set-strategic-number sn-wood-gatherer-percentage pidm-wood) | |
(set-strategic-number sn-gold-gatherer-percentage pidm-gold) | |
(set-strategic-number sn-stone-gatherer-percentage pidm-stone) | |
) | |
(defrule | |
(timer-triggered one-minute-timer) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(food-amount > 1500) | |
=> | |
(set-strategic-number sn-food-gatherer-percentage 0) | |
(set-strategic-number sn-wood-gatherer-percentage 55) | |
(set-strategic-number sn-gold-gatherer-percentage 40) | |
(set-strategic-number sn-stone-gatherer-percentage 5) | |
) | |
#end-if | |
; ********** ATTACK RULES ********** | |
(defrule | |
(strategic-number sn-maximum-town-size < 42) | |
(enemy-buildings-in-town) | |
(up-compare-goal forward-threat-goal != 1) | |
=> | |
(set-strategic-number sn-maximum-hunt-drop-distance 0); disable hunting and prevent villagers to run into those towers | |
(set-goal forward-threat-goal 1) | |
(chat-to-player my-player-number "forward buildings detected") | |
) | |
(defrule | |
(strategic-number sn-maximum-town-size >= 38) | |
(not (enemy-buildings-in-town)) | |
(goal forward-threat-goal 1) | |
=> | |
(set-goal forward-threat-goal -1) | |
(chat-to-player my-player-number "The forward threat has been eliminated") | |
) | |
; Retreat Rules | |
(defrule | |
(goal enemy-fortifications-goal -1) | |
(or | |
(players-building-type-count any-enemy castle > 3) | |
(and | |
(nand | |
(building-type-count stone-wall > 10); arena map | |
(unit-type-count battering-ram-line > 0) | |
) | |
(and | |
(players-building-type-count any-enemy castle > 0) | |
(players-building-type-count any-enemy stone-wall > 10) | |
) | |
) | |
) | |
=> | |
(set-goal enemy-fortifications-goal 1) | |
) | |
(defrule | |
(goal enemy-fortifications-goal 1) | |
(players-building-type-count every-enemy castle < 2) | |
(or | |
(players-building-type-count every-enemy stone-wall < 10) | |
(and | |
(building-type-count stone-wall > 10) | |
(unit-type-count battering-ram-line > 0) | |
) | |
) | |
=> | |
(set-goal enemy-fortifications-goal -1) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(game-time > 1080); not when rushing in DM | |
(unit-type-count trebuchet-set < 1) | |
(unit-type-count battering-ram-line == 0) | |
(cc-players-unit-type-count target-player castle-arrow > 0) | |
=> | |
(set-goal retreat-now-goal 1) | |
(set-goal attack-status-goal retreat) | |
(set-goal attack-goal 0) | |
(enable-timer attack-timer 60) | |
(set-goal reset 1); to avoid reset-spamming | |
(chat-to-player my-player-number "retreat out of castle fire") | |
) | |
(defrule | |
(current-age == feudal-age) | |
(goal threat-source-goal tower-class) | |
(cc-players-unit-type-count target-player watch-tower-arrow > 0) | |
=> | |
(chat-to-player my-player-number "retreat out of watch-tower") | |
(set-goal retreat-now-goal 1) | |
(set-goal attack-status-goal retreat) | |
(set-goal attack-goal 0) | |
(set-goal reset 1); to avoid reset-spamming | |
(enable-timer attack-timer 9) | |
) | |
(defrule | |
(goal threat-source-goal tower-class) | |
(cc-players-unit-type-count target-player watch-tower-arrow > 0) | |
(unit-type-count battering-ram-line == 0) | |
(unit-type-count trebuchet == 0) | |
(timer-triggered attack-timer) | |
(or (unit-type-count ranged-unit-class > 4) | |
(unit-type-count cavalry-archer-class > 4)) | |
(unit-type-count knight-line < 6) | |
=> | |
(set-goal retreat-now-goal 1) | |
(set-goal attack-status-goal retreat) | |
(set-goal attack-goal 0) | |
(enable-timer attack-timer 9) | |
(set-goal reset 1); to avoid reset-spamming | |
(chat-to-player my-player-number "retreat out of tower fire") | |
) | |
(defrule | |
(current-age == feudal-age) | |
(or (cc-players-unit-type-count target-player tc-arrow > 0) | |
(and (cc-players-unit-type-count target-player castle-arrow > 0) | |
(goal threat-source-goal castle-arrow))) | |
=> | |
(set-goal retreat-now-goal 1) | |
(set-goal attack-status-goal retreat); always retreat out of TC fire when flushing | |
(set-goal attack-goal 0) | |
(set-goal reset 1); to avoid reset-spamming | |
(chat-to-player my-player-number "retreat out of TC fire") | |
(enable-timer attack-timer 9) | |
) | |
(defrule | |
(goal team-coordination-goal 1) | |
(game-time < 1800) | |
(goal unit-goal knight) | |
(goal threat-source-goal monastery-class) | |
(goal monk-threat-goal 1) | |
(nor (up-research-status c: ri-heresy >= research-pending) | |
(unit-type-count scout-cavalry-line > 3)) | |
(strategic-number sn-military-level <= 0) | |
=> | |
(set-goal retreat-now-goal 1) | |
(set-goal attack-status-goal retreat) | |
(set-goal attack-goal 0) | |
(enable-timer attack-timer 60) | |
(chat-to-player my-player-number "retreat from monks") | |
) | |
(defrule | |
(current-age >= castle-age) | |
(population < seventy-five-percent-pop) | |
(or (strategic-number sn-military-level < 2) | |
(nor (goal threat-target-goal cavalry-unit-class) | |
(goal unit-goal eagle-warrior))) | |
(strategic-number sn-military-level < 3) | |
(cc-players-unit-type-count target-player tc-arrow > 0) | |
(unit-type-count battering-ram-line < 1) | |
(unit-type-count trebuchet-set < 1) | |
=> | |
(set-goal attack-goal 0) | |
(set-goal retreat-now-goal 1) | |
(enable-timer attack-timer 60) | |
(set-goal reset 1); to avoid reset-spamming | |
; (chat-to-player my-player-number "retreat out of TC fire as not enough military superiority") | |
) | |
(defrule | |
(current-age >= castle-age) | |
(population < eighty-five-percent-pop) | |
(unit-type-count battering-ram-line < 1) | |
(unit-type-count trebuchet-set < 1) | |
(or (cc-players-unit-type-count target-player castle-arrow > 0) | |
(cc-players-unit-type-count target-player castle-arrow-chemistry > 0)) | |
(up-compare-goal threat-target-goal != siege-unit-class) | |
=> | |
(set-goal attack-goal 0) | |
(set-goal retreat-now-goal 1) | |
(enable-timer attack-timer 60) | |
(set-goal reset 1); to avoid reset-spamming | |
(chat-to-player my-player-number "retreat out of castle fire as not enough military superiority") | |
) | |
(defrule | |
(game-time > 600); not when rushing in PIDM | |
(goal attack-goal 0) | |
(unit-type-count trebuchet-set < 1) | |
(unit-type-count battering-ram-line == 0) | |
(cc-players-unit-type-count target-player tc-arrow > 0) | |
(players-military-population target-player > 5) | |
(up-compare-goal under-attack-goal != 1) | |
(timer-triggered attack-timer) | |
=> | |
(set-goal retreat-now-goal 1) | |
(enable-timer attack-timer 60) | |
(set-goal reset 1); to avoid reset-spamming | |
(chat-to-player my-player-number "retreat out of TC fire") | |
) | |
(defrule | |
(cc-players-unit-type-count target-player tc-arrow == 0) | |
(current-age == feudal-age) | |
(goal strategy-goal flush) | |
(timer-triggered retreat-timer); test | |
(goal retreat-now-goal 0); test | |
(goal reset 1); to avoid spamming | |
(strategic-number sn-military-level > 1) | |
=> | |
(up-reset-unit c: -1) | |
(set-goal reset 0) | |
(enable-timer attack-timer 3) | |
(chat-to-player my-player-number "reset as attackers are out of TC") | |
) | |
(defrule | |
(timer-triggered attack-timer) | |
(up-timer-status help-ally-timer == timer-running) | |
=> | |
(up-modify-sn sn-focus-player-number g:= closest-ally-goal) | |
) | |
(defrule | |
(timer-triggered attack-timer) | |
(up-timer-status help-ally-timer == timer-running) | |
(strategic-number sn-military-level >= -1) | |
(strategic-number sn-target-evaluation-ally-proximity == 1) | |
=> | |
(set-goal attack-goal 4) | |
) | |
(defrule | |
(true) | |
=> | |
(up-modify-sn sn-focus-player-number g:= closest-enemy-goal) | |
) | |
(defrule | |
(strategic-number sn-military-level < 3) | |
(goal enemy-goal flush) | |
(goal strategy-goal flush) | |
(military-population < 15) | |
(players-military-population target-player > 5) | |
=> | |
(up-jump-rule 1) | |
) | |
(defrule | |
(strategic-number sn-military-level >= 2); military superiority so | |
(or (strategic-number sn-current-age != fc-transit) | |
(strategic-number sn-military-level >= 3)) | |
=> | |
(set-goal attack-goal 1); attack might be an idea, check other conditions | |
) | |
(defrule | |
(population > max-civ) | |
(strategic-number sn-military-level >= 2) | |
(current-age >= imperial-age) | |
(or (unit-type-count battering-ram-line >= 6) | |
(or (unit-type-count trebuchet-set >= 3) | |
(strategic-number sn-military-level >= 3))) | |
(players-current-age target-player <= castle-age) | |
(up-compare-goal attack-goal < 1) | |
=> | |
(set-goal attack-goal 1); attack might be an idea, check other conditions | |
; (chat-local-to-self "Attack now! They're still not in the imperial-age.") | |
) | |
(defrule | |
(population > max-civ) | |
(strategic-number sn-military-level >= 2) | |
(current-age >= castle-age) | |
(or (unit-type-count battering-ram-line >= 3) | |
(or (unit-type-count trebuchet-set >= 1) | |
(strategic-number sn-military-level >= 3))) | |
(players-current-age target-player <= feudal-age) | |
(up-compare-goal attack-goal < 1) | |
=> | |
(set-goal attack-goal 1); attack might be an idea, check other conditions | |
; (chat-local-to-self "Attack now! They're still not in the castle-age.") | |
) | |
(defrule | |
(population > max-civ) | |
(strategic-number sn-military-level >= 2) | |
(current-age >= feudal-age) | |
(or (unit-type-count battering-ram-line >= 1) | |
(or (unit-type-count trebuchet-set >= 1) | |
(strategic-number sn-military-level >= 3))) | |
(players-current-age target-player <= dark-age) | |
(up-compare-goal attack-goal < 1) | |
=> | |
(set-goal attack-goal 1); attack might be an idea, check other conditions | |
; (chat-local-to-self "Attack now! They're still not in the feudal-age.") | |
) | |
#load-if-not-defined DEATH-MATCH | |
(defrule | |
(strategic-number sn-military-level >= 1); more aggressive in team play | |
(unit-type-count cavalry-unit-class > 5) | |
(current-age >= castle-age) | |
(current-age-time >= 240) | |
(player-in-game any-ally) | |
=> | |
(set-goal attack-goal 1) | |
) | |
(defrule | |
(current-age == castle-age) | |
(military-population > 16) | |
(strategic-number sn-resource-control < 2) | |
(or | |
(strategic-number sn-military-level >= military-level-flush) | |
(and | |
(strategic-number sn-military-level >= military-level-flush-aggressive) | |
(current-age-time < 300) | |
) | |
) | |
(goal forward-threat-goal -1) | |
(strategic-number sn-cavalry-threat == 0) | |
(goal strategy-goal flush) | |
(up-research-status c: ri-bodkin-arrow >= research-pending) | |
(players-building-type-count focus-player castle == 0); not if enemy has a castle | |
=> | |
(set-goal attack-goal 1) | |
; (up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
) | |
(defrule | |
(unit-type-count ranged-unit-class > 19) | |
(strategic-number sn-military-level >= 0) | |
(players-current-age focus-player == feudal-age) | |
(goal strategy-goal rush) | |
(or | |
(goal control-goal aggressive-rush); xbow or ca with bodkin should beat feudal age stuff | |
(civ-selected briton) | |
) | |
(up-research-status c: ri-bodkin-arrow >= research-pending) | |
=> | |
(set-goal attack-goal 1) | |
; (up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
) | |
(defrule | |
(game-time < 1620) | |
(goal strategy-goal rush) | |
(goal unit-goal knight) | |
(or | |
(goal enemy-goal skirmisher) | |
(or | |
(strategic-number sn-archer-threat > 1) | |
(players-unit-type-count focus-player skirmisher-line > 7) | |
) | |
) | |
(or | |
(or | |
(up-research-status c: ri-chain-barding >= research-pending) | |
(civ-selected saracen) | |
) | |
(strategic-number sn-military-level >= 1) | |
) | |
(strategic-number sn-military-level >= 0) | |
(unit-type-count knight-line > 12) | |
=> | |
(set-goal attack-goal 1) | |
) | |
(defrule | |
(game-time < 1620) | |
(goal attack-goal 0) | |
(goal strategy-goal rush) | |
(goal unit-goal knight) | |
(up-research-status c: ri-bloodlines >= research-pending) | |
(or | |
(up-research-status c: ri-chain-barding >= research-pending) | |
(civ-selected saracen) | |
) | |
(food-amount < 60) | |
(gold-amount < 80) | |
(unit-type-count knight-line > 8) | |
(players-unit-type-count focus-player camel-line < 8) | |
(players-unit-type-count focus-player knight-line < 8) | |
(goal monk-threat-goal 0) | |
=> | |
(set-goal attack-goal 1) | |
; (up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
) | |
(defrule | |
(game-time < 1800) | |
(goal attack-goal 0) | |
(goal unit-goal eagle-warrior) | |
(or | |
(or | |
(goal anti-cavalry-threat-goal 1) | |
(players-unit-type-count focus-player skirmisher-line > 7) | |
) | |
(and | |
(players-current-age focus-player == feudal-age) | |
(players-unit-type-count focus-player militiaman-line < 1) | |
) | |
) | |
(strategic-number sn-military-level >= 0) | |
(unit-type-count eagle-warrior-line > 20) | |
=> | |
(set-goal attack-goal 1) | |
; (up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
) | |
(defrule | |
(game-time < 1680) | |
(goal attack-goal 0) | |
(goal strategy-goal flush) | |
(goal enemy-goal skirmisher); vs enemy that trys to stall flushes with tons of trash to keep military level high | |
(strategic-number sn-military-level >= 0) | |
(unit-type-count knight-line > 0) | |
(up-research-status c: ri-bodkin-arrow >= research-pending) | |
(players-building-type-count focus-player castle == 0); not in 1v1 if enemy has a castle | |
=> | |
(set-goal attack-goal 1) | |
; (up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
) | |
(defrule | |
(goal attack-goal 0) | |
(goal unit-goal monk) | |
(unit-type-count trebuchet-set > 0) | |
(up-research-status c: ri-block-printing != research-available) | |
(up-research-status c: ri-theocracy != research-available) | |
(up-research-status c: ri-illumination != research-available) | |
(current-age == imperial-age) | |
(unit-type-count monk > 20) | |
(goal anti-monk-threat-goal 0) | |
=> | |
(set-goal attack-goal 1) | |
; (up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
) | |
(defrule | |
(goal attack-goal 0) | |
(goal unit-goal scorpion) | |
(goal strategy-goal rush) | |
(unit-type-count battering-ram-line > 1) | |
(unit-type-count scorpion-line > 20) | |
(strategic-number sn-military-level >= 0) | |
=> | |
(set-goal attack-goal 1) | |
; (up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
) | |
(defrule | |
(goal attack-goal 0) | |
(players-military-population every-enemy < 3) | |
(or | |
; (and | |
(or | |
(unit-type-count scout-cavalry > 2) | |
(and | |
(goal strategy-goal flush) | |
(military-population > 8) | |
) | |
) | |
; (up-player-distance target-player < 70) | |
; ) | |
(unit-type-count cavalry-unit-class > 3) | |
) | |
=> | |
(set-goal attack-goal 1) | |
) | |
(defrule | |
(goal attack-goal 0) | |
(players-building-count focus-player > 0) | |
(players-building-type-count focus-player watch-tower < 2) | |
(players-building-type-count focus-player castle == 0) | |
(players-military-population focus-player < 2) | |
(goal strategy-goal flush) | |
(military-population > 6) | |
=> | |
; (up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
(set-goal attack-goal 1) | |
) | |
(defrule | |
(building-type-count stable == 1) | |
(building-type-count town-center == 1) | |
(military-population >= 70) | |
(goal attack-goal 0) | |
(goal unit-goal cavalry-archer) | |
(up-research-status c: ri-thumb-ring >= research-pending) | |
(strategic-number sn-current-age >= castle);high military | |
(players-current-age focus-player == castle-age); while enemy is in castle-age | |
=> | |
(set-goal attack-goal 1) | |
; (up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
) | |
#end-if | |
(defrule | |
(goal attack-goal 0) | |
(population > max-civ-pop) | |
(strategic-number sn-current-age >= ci-transit); advancing to or already in imperial age with nearlyfull pop | |
(players-current-age every-enemy == castle-age); while enemy is in castle-age | |
(strategic-number sn-resource-control < 2) | |
(strategic-number sn-military-level >= 0) | |
(players-building-type-count focus-player castle < 2) | |
=> | |
(set-goal attack-goal 1); attack and try to hold him in castle age | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(players-current-age focus-player == feudal-age) | |
(strategic-number sn-military-level >= 0) | |
(up-research-status c: ri-bodkin-arrow >= research-pending) | |
(or | |
(up-research-status c: ri-crossbow >= research-pending) | |
(up-compare-goal ranged-unit-type-goal != archer) | |
) | |
(or | |
(unit-type-count militiaman-line <= 6) | |
(up-research-status c: ri-long-swordsman >= research-pending) | |
) | |
=> | |
(set-goal attack-goal 1) | |
; (up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
) | |
(defrule | |
(goal strategy-goal flush) | |
(current-age == castle-age) | |
(players-current-age focus-player == feudal-age) | |
(strategic-number sn-military-level >= 0) | |
(nor (research-available ri-bodkin-arrow) | |
(research-available ri-crossbow)) | |
(goal ranged-unit-type-goal archer) | |
(military-population > 40) | |
=> | |
(set-goal attack-goal 1) | |
; (up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
) | |
(defrule | |
(current-age-time > 240) | |
(current-age >= imperial-age) | |
(players-current-age target-player <= castle-age) | |
(strategic-number sn-military-level >= 1) | |
(military-population > 40) | |
=> | |
(set-goal attack-goal 1) | |
) | |
(defrule | |
(population >= max-pop) | |
(strategic-number sn-military-level >= 1) | |
(strategic-number sn-current-age >= imperial) | |
(current-age-time > 180) | |
(goal escrow-purpose-goal 0) | |
(or (research-completed ri-bracer) | |
(or (research-completed ri-plate-mail) | |
(or (research-completed ri-plate-barding) | |
(or (research-completed ri-blast-furnace) | |
(research-completed ri-ring-archer-armor))))) | |
=> | |
(set-goal attack-goal 1) | |
) | |
(defrule | |
(goal enemy-fortifications-goal 1) | |
(unit-type-count trebuchet-set < 1) | |
(unit-type-count battering-ram-line < 3) | |
=> | |
(set-goal attack-goal 0) | |
(chat-local-to-self "no attack vs enemy fortifications") | |
) | |
(defrule | |
(goal attack-goal 1) | |
(goal strategy-goal flush) | |
(current-age == feudal-age) | |
(or | |
(or | |
(and | |
(players-current-age focus-player == castle-age) | |
(players-military-population focus-player > 10) | |
) | |
(strategic-number sn-resource-control == 2) | |
) | |
(players-military-population focus-player > 16) | |
) | |
(strategic-number sn-military-level < 3) | |
=> | |
(set-goal attack-goal 0); better go castle age and attack then | |
) | |
(defrule | |
(goal attack-goal 1) | |
(goal strategy-goal flush) | |
(current-age == feudal-age) | |
(players-building-type-count focus-player watch-tower > 0) | |
(or | |
(strategic-number sn-military-level < 3) | |
(and | |
(players-military-population focus-player > 9) | |
(players-current-age focus-player >= castle-age) | |
) | |
) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
(goal attack-goal 1) | |
(goal strategy-goal flush) | |
(current-age == feudal-age) | |
(not (goal unit-goal militiaman-line)) | |
(goal enemy-goal eagle-warrior) | |
(players-military-population focus-player > 9) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
(players-current-age focus-player > feudal-age) | |
(goal attack-goal 1) | |
(or (and (goal strategy-goal flush) | |
(current-age == feudal-age)) | |
(and (or (goal unit-goal eagle-warrior) | |
(goal unit-goal archer)) | |
(unit-type-count spearman-line < 10))) | |
(strategic-number sn-cavalry-threat >= 1); enemy cavalry found | |
(unit-type-count spearman-line < 5); no anti cavalry | |
(population < max-civ-pop); test | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
(goal attack-goal 1) | |
(goal strategy-goal flush) | |
(current-age == feudal-age) | |
(or | |
(players-unit-type-count any-enemy knight-line >= 8) | |
(goal forward-threat-goal 1) | |
) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
(goal attack-goal 1) | |
(goal strategy-goal flush) | |
(current-age >= castle-age) | |
(or (and (unit-type-count spearman-line >= 6) | |
(research-available ri-pikeman)) | |
(and (unit-type-count militiaman-line >= 12) | |
(research-available ri-long-swordsman))) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
(goal attack-goal 1) | |
(game-time < 1800) | |
(goal monk-threat-goal 1) | |
(unit-type-count eagle-warrior-line < 4) | |
(unit-type-count scout-cavalry-line < 4) | |
(nor | |
(up-research-status c: ri-heresy >= research-pending) | |
(goal unit-goal archer) | |
) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
(goal attack-goal 1) | |
(or (goal unit-goal skirmisher) | |
(or (and (goal unit-goal archer) | |
(strategic-number sn-cavalry-threat > 0)) | |
(or (goal unit-goal my-unique-unit-line) | |
(goal unit-goal mix)))) | |
(goal strategy-goal rush) | |
(or (population < max-civ-pop); test | |
(current-age < imperial-age)) | |
(strategic-number sn-military-level < 3) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
(goal attack-goal 1) | |
(up-research-status c: ri-bodkin-arrow < research-pending) | |
(or | |
(or | |
(goal unit-goal skirmisher) | |
(goal unit-goal archer) | |
) | |
(or | |
(goal unit-goal my-unique-unit-line) | |
(goal unit-goal mix) | |
) | |
) | |
(current-age >= castle-age) | |
(unit-type-count ranged-unit-class > 12) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
(goal attack-goal 1) | |
(goal ranged-unit-type-goal archer) | |
(current-age >= castle-age) | |
(unit-type-count archer > 10) | |
(up-research-status c: ri-crossbow < research-pending) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
(goal attack-goal 1) | |
(or | |
(goal unit-goal skirmisher) | |
(goal unit-goal mix) | |
) | |
(or | |
(goal enemy-goal skirmisher) | |
(unit-type-count skirmisher-line > 9) | |
) | |
(or | |
(research-available ri-elite-skirmisher) | |
(research-available ri-bodkin-arrow) | |
) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
; (strategic-number sn-military-level < 3) | |
(goal attack-goal 1) | |
(or | |
(strategic-number sn-resource-control == ri-elite-eagle-warrior) | |
(or | |
(goal strategy-goal fast-imp) | |
(goal strategy-goal boom) | |
) | |
) | |
(or | |
(current-age < imperial-age) | |
(current-age-time < 120) | |
) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
(goal attack-goal 1) | |
(unit-type-count monk > 30) | |
(or | |
(current-age < imperial-age) | |
(or | |
(research-available ri-theocracy) | |
(research-available ri-illumination) | |
) | |
) | |
(strategic-number sn-military-level < 3) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
(goal attack-goal 1) | |
(or (players-building-count every-enemy == 0); no attack when enemy is not yet found. | |
(or (and (strategic-number sn-resource-control == ri-pikeman) | |
(research-available ri-pikeman)) | |
(and (goal unit-goal eagle-warrior) | |
(research-available ri-chain-mail)))) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule | |
(current-age == feudal-age) | |
(goal strategy-goal flush) | |
(or | |
(and | |
(goal enemy-goal eagle-warrior) | |
(unit-type-count militiaman-line < 5) | |
) | |
(and | |
(strategic-number sn-archer-threat > 1) | |
(players-building-type-count target-player watch-tower > 0) | |
) | |
) | |
=> | |
(set-goal retreat-now-goal 2) | |
) | |
(defrule | |
(goal attack-goal 1) | |
(players-building-type-count focus-player castle < 3) | |
(or | |
(and | |
(unit-type-count battering-ram > 1) | |
(military-population > 50) | |
) | |
(players-building-type-count focus-player castle == 0) | |
) | |
(goal enemy-fortifications-goal -1) | |
=> | |
(set-goal attack-goal 2) | |
; (chat-local-to-self "military advantage attack") | |
) | |
#load-if-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(current-age == imperial-age) | |
(population > seventy-five-percent-pop) | |
(players-building-count any-enemy > 0) | |
(unit-type-count paladin > 30) | |
(game-time < 900) | |
=> | |
(set-goal attack-goal 2) | |
) | |
#end-if | |
#load-if-defined DEFEND-WONDER | |
(defrule | |
(current-age == imperial-age) | |
(unit-type-count trebuchet-set > 0) | |
(strategic-number sn-military-level > 0) | |
(players-building-type-count any-enemy wonder > 0) | |
=> | |
(set-goal attack-goal 2) | |
) | |
#end-if | |
(defrule | |
(goal attack-goal 1) | |
(unit-type-count battering-ram > 0) | |
(players-building-type-count focus-player castle == 1) | |
(strategic-number sn-military-level > 1) | |
(goal enemy-fortifications-goal -1) | |
=> | |
(set-goal attack-goal 2) | |
; (chat-local-to-self "military advantage attack2") | |
) | |
(defrule | |
(goal attack-goal 1) | |
(unit-type-count battering-ram-line > 0) | |
(players-building-type-count focus-player castle < 2) | |
(strategic-number sn-military-level > 1) | |
(or (unit-type-count cavalry-unit-class > 5) | |
(strategic-number sn-military-level > 2)) | |
(nand (or (goal enemy-fortifications-goal 1) | |
(players-building-type-count focus-player stone-wall > 10)) | |
(unit-type-count trebuchet-set == 0)) | |
=> | |
(set-goal attack-goal 2) | |
) | |
#load-if-not-defined DIFFICULTY-MODERATE | |
#load-if-not-defined DIFFICULTY-HARD | |
#load-if-not-defined DIFFICULTY-HARDEST | |
(defrule | |
(current-age == imperial-age) | |
(current-age-time > 150) | |
(population > sixty-percent-pop) | |
(strategic-number sn-military-level >= 0) | |
(unit-type-count trebuchet-set > 0) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands); not on islands | |
=> | |
(set-goal attack-goal 2) | |
) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(current-age == imperial-age) | |
(population >= seventy-five-percent-pop) | |
(players-building-count any-enemy > 0) | |
(up-research-status c: ri-elite-eagle-warrior >= research-pending) | |
(players-current-age every-enemy <= castle-age) | |
(goal enemy-fortifications-goal -1) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands); not on islands | |
=> | |
(set-goal attack-goal 2) | |
) | |
(defrule | |
(current-age == imperial-age) | |
(current-age-time > 150) | |
(population >= del-civ-pop) | |
(players-building-count any-enemy > 0) | |
(or (unit-type-count battering-ram-line >= 3) | |
(unit-type-count trebuchet-set > 0)) | |
(up-research-status c: ri-paladin != research-pending) | |
(goal enemy-fortifications-goal -1) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands); not on islands | |
=> | |
(set-goal attack-goal 2) | |
; (chat-local-to-self "High pop attack.") | |
) | |
(defrule | |
(current-age == imperial-age) | |
(current-age-time > 150) | |
(population >= del-civ-pop) | |
(unit-type-count trebuchet-set > 0) | |
(players-building-count any-enemy > 0) | |
(or (and (unit-type-count-total 579 < 1) ;Male gold miner | |
(unit-type-count-total 581 < 1)) ;female gold miner | |
(unit-type-count trebuchet-set > 2)) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands); not on islands | |
=> | |
(set-goal attack-goal 2) | |
; (chat-local-to-self "High pop attack. 2") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(or (population >= del-civ-pop) | |
(game-time < 1200)) | |
(population >= max-civ-pop) | |
(goal enemy-fortifications-goal 1); enemy fortifications | |
(or (and (unit-type-count trebuchet-set < 1); no trebs, but | |
(and (building-type-count castle == 0); no castle | |
(dropsite-min-distance stone > 10))); no stone available | |
(starting-age == post-imperial-age)) | |
(unit-type-count battering-ram-line > 3); so still attack if we have rams to prevent idling | |
=> | |
(set-goal attack-goal 2) | |
; (chat-local-to-self "High pop attack. 3") | |
) | |
(defrule | |
(goal attack-goal 0) | |
(or (population >= del-civ-pop) | |
(or (unit-type-count trebuchet-set >= 1) | |
(unit-type-count battering-ram-line >= 3))) | |
(or (players-building-type-count any-enemy wonder > 0) | |
(enemy-captured-relics)) | |
=> | |
(set-goal attack-goal 2) | |
; (chat-local-to-self "Win-condition attack.") | |
) | |
#load-if-defined FOR-DEBUGGING | |
(defrule | |
(up-compare-goal attack-goal != 0) | |
(or (strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
(and (or (dropsite-min-distance wood > 20) | |
(cc-players-unit-type-count 0 tree-class < 25)) | |
(or (population < del-civ-pop) | |
(unit-type-count siege-unit-class < 3)))) | |
=> | |
(set-goal attack-goal 0) | |
(chat-local-to-self "No attack - low wood/islands.") | |
) | |
#end-if | |
#load-if-not-defined DIFFICULTY-MODERATE | |
#load-if-not-defined DIFFICULTY-HARD | |
#load-if-not-defined DIFFICULTY-HARDEST | |
(defrule | |
(or (population >= del-civ-pop) | |
(strategic-number sn-resource-control == 2)); holding back resources due to the difficulty level | |
(strategic-number sn-military-level >= 1); 2 | |
(or (strategic-number sn-current-age != fc-transit) | |
(strategic-number sn-military-level >= 2)); 3 | |
=> | |
(set-goal attack-goal 1); attack might be an idea, check other conditions | |
) | |
(defrule | |
(up-compare-goal attack-goal != 0) | |
; test (population < max-pop); attack at some point | |
(or (strategic-number sn-military-level >= 3) | |
(or (and (strategic-number sn-military-level >= 2) | |
(game-time < 4200)) | |
(and (strategic-number sn-military-level >= 1) | |
(game-time < 3000)))) | |
=> | |
(set-goal attack-goal 0) | |
; (chat-local-to-self "Wait longer with attacking on this difficulty level.") | |
) | |
(defrule | |
(up-compare-goal attack-goal != 0) | |
(population < max-pop); attack at some point | |
(strategic-number sn-military-level >= 0); 1 | |
(player-in-game target-player) | |
(stance-toward target-player enemy) | |
(or (players-current-age target-player <= castle-age) | |
(players-current-age-time target-player <= 600)) | |
=> | |
(set-goal attack-goal 0) | |
; (chat-local-to-self "Wait longer with attacking on this difficulty level.") | |
) | |
#end-if | |
#end-if | |
#end-if | |
#load-if-defined DIFFICULTY-MODERATE | |
(defrule | |
(up-compare-goal attack-goal != 0) | |
(population < max-pop); attack at some point | |
(or (game-time < 360) | |
(or (and (strategic-number sn-military-level >= 2) | |
(game-time < 1320)) | |
(and (strategic-number sn-military-level >= 1) | |
(game-time < 1020)))) | |
=> | |
(set-goal attack-goal 0) | |
; (chat-local-to-self "Wait longer with attacking on this difficulty level.") | |
) | |
#end-if | |
#load-if-defined DIFFICULTY-HARD | |
(defrule | |
(up-compare-goal attack-goal != 0) | |
(population < max-pop); attack at some point | |
(or (game-time < 180) | |
(or (and (strategic-number sn-military-level >= 2) | |
(game-time < 600)) | |
(and (strategic-number sn-military-level >= 1) | |
(game-time < 300)))) | |
=> | |
(set-goal attack-goal 0) | |
; (chat-local-to-self "Wait longer with attacking on this difficulty level.") | |
) | |
#end-if | |
(defrule | |
(timer-triggered attack-timer) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(strategic-number sn-maximum-town-size >= 40) | |
(population > eighty-five-percent-pop); keep attacking when pop is high | |
(or (nand (goal enemy-fortifications-goal 1) | |
(unit-type-count trebuchet-set < 1)); except if the enemy has fortifications and we don't have siege | |
(unit-type-count siege-ram > 4)) | |
=> | |
(set-goal attack-goal 4) | |
; (chat-local-to-self "Keep attacking.") | |
) | |
(defrule | |
(taunt-detected any-ally 31) | |
(taunt-detected any-human-ally 36) | |
=> | |
(acknowledge-taunt this-any-human-ally 36) | |
) | |
(defrule | |
(taunt-detected any-ally 31); standard attack taunt | |
(strategic-number sn-military-level < 1) | |
(military-population < 30) | |
(or (strategic-number sn-resource-control == ri-pikeman); we want pikemen vs knights | |
(and (strategic-number sn-cavalry-threat >= 1) | |
(unit-type-count spearman-line < 5))) | |
(or (goal unit-goal archer) | |
(or (goal unit-goal skirmisher) | |
(goal unit-goal my-unique-unit-line))) | |
(population < del-civ-pop); almost full pop => attack anyway | |
=> | |
(acknowledge-taunt this-any-ally 31) | |
(chat-to-allies-using-id 22118); "Alas, I cannot help that at this time." | |
) | |
(defrule | |
(taunt-detected any-ally 31) | |
(strategic-number sn-military-level < 1) | |
(military-population < 30) | |
(or (and (strategic-number sn-military-level < 0) | |
(population < max-civ-pop)) | |
(military-population < 5)) | |
(population < eighty-five-percent-pop) | |
=> | |
(acknowledge-taunt this-any-ally 31) | |
(chat-to-allies-using-id 22118); "Alas, I cannot help that at this time." | |
) | |
(defrule | |
(taunt-detected any-ally 31) | |
(strategic-number sn-military-level < 2); 3 | |
(players-building-type-count focus-player castle > 0) | |
(or (players-building-type-count focus-player castle > 1) | |
(and (players-building-type-count focus-player stone-wall-line > 10) | |
(unit-type-count battering-ram-line < 1))) | |
(unit-type-count trebuchet-set < 1) | |
(unit-type-count battering-ram-line < 2) | |
(population < del-civ-pop); almost full pop => attack anyway | |
=> | |
(acknowledge-taunt this-any-ally 31) | |
(chat-to-allies-using-id 22118); "Alas, I cannot help that at this time." | |
) | |
(defrule | |
(taunt-detected any-ally 31) | |
(goal strategy-goal flush) | |
(current-age == feudal-age) | |
(or (or (and (players-current-age focus-player == castle-age) | |
(players-military-population focus-player > 10)) | |
(strategic-number sn-resource-control == 2)) | |
(players-military-population focus-player > 16)) | |
(population < del-civ-pop); almost full pop => attack anyway | |
(strategic-number sn-military-level < 2) | |
=> | |
(acknowledge-taunt this-any-ally 31) | |
(chat-to-allies-using-id 22118); "Alas, I cannot help that at this time." | |
) | |
(defrule | |
(taunt-detected any-ally 222) | |
(or (military-population >= 15) | |
(or (population >= sixty-percent-pop) | |
(or (population >= max-civ-pop) | |
(strategic-number sn-military-level >= 0)))) | |
(military-population >= 4) | |
=> | |
(set-goal attack-goal 4) | |
(enable-timer help-ally-timer 210) | |
; (set-strategic-number sn-target-evaluation-ally-proximity 1) | |
; (acknowledge-taunt this-any-ally 222) | |
; (chat-to-allies-using-id 22153); "At once, sire!" | |
) | |
(defrule | |
(taunt-detected any-ally 31) | |
(or (military-population >= 40) | |
(or (population >= eighty-five-percent-pop) | |
(or (population >= del-civ-pop) | |
(strategic-number sn-military-level >= 1)))) | |
(military-population >= 8) | |
=> | |
(set-goal attack-goal 4) | |
(enable-timer help-ally-timer 210) | |
; (set-strategic-number sn-target-evaluation-ally-proximity 1) | |
; (acknowledge-taunt this-any-ally 31) | |
; (chat-to-allies-using-id 22153); "At once, sire!" | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(players-building-type-count target-player stone-wall > 0) | |
(strategic-number sn-maximum-town-size >= 40) | |
(strategic-number sn-maximum-town-size < 680); 480 | |
(enemy-buildings-in-town) | |
(timer-triggered one-minute-timer); wild guess work | |
=> | |
(up-modify-sn sn-maximum-town-size c:+ 25); increase TS to reach buildings behind the wall | |
) | |
(defrule | |
(game-time > 1200) | |
(timer-triggered micro-timer) | |
(up-compare-goal threat-time-goal > 5000) | |
(strategic-number sn-number-attack-groups > 0) | |
(strategic-number sn-minimum-attack-group-size < 2) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(unit-type-count monastery-class < 12) | |
(unit-type-count trebuchet-set == 0) | |
=> | |
(enable-timer micro-timer 25) | |
(set-strategic-number sn-group-form-distance 30) | |
(set-strategic-number sn-number-attack-groups 500) | |
(set-strategic-number sn-minimum-attack-group-size 40) | |
(set-strategic-number sn-maximum-attack-group-size 40) | |
(set-strategic-number sn-attack-group-gather-spacing 3) | |
(chat-to-player my-player-number "no enemy activites detected - large groups") | |
) | |
(defrule | |
(goal retargetenemy yes) | |
; (building-type-count-total town-center >= 1) | |
(players-building-count any-enemy > 0) | |
=> | |
(up-find-player enemy find-closest closest-enemy-goal) | |
(up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
(up-modify-sn sn-focus-player-number g:= closest-enemy-goal)) | |
(defrule | |
(goal retargetenemy 3); wonder/relics | |
(players-building-type-count every-enemy wonder <= 0) | |
(not (enemy-captured-relics)) | |
=> | |
(set-goal retargetenemy yes) | |
(chat-to-player my-player-number "Retargeting to closest enemy.") | |
(set-strategic-number sn-special-attack-type1 0) | |
(set-strategic-number sn-special-attack-influence1 1) | |
(set-strategic-number sn-special-attack-type3 0) | |
; (set-strategic-number sn-special-attack-influence3 1) | |
) | |
#load-if-defined VICTORY-STANDARD | |
(defrule | |
(players-building-count any-enemy > 0) | |
(enemy-captured-relics) | |
(up-compare-goal retargetenemy != 3) | |
=> | |
(up-modify-sn sn-target-player-number g:= winning-player) | |
(up-modify-sn sn-focus-player-number g:= winning-player) | |
(set-strategic-number sn-special-attack-type1 1) | |
(set-strategic-number sn-special-attack-influence1 10000) | |
(chat-to-player my-player-number "Retargeting to player with relics.") | |
(set-goal retargetenemy 3)); blocks retargeting to closest player | |
(defrule | |
(players-building-count any-enemy > 0) | |
(players-building-type-count target-player wonder == 0) | |
(players-building-type-count any-enemy wonder > 0) | |
=> | |
(up-modify-sn sn-target-player-number g:= winning-player) | |
(up-modify-sn sn-focus-player-number g:= winning-player) | |
(set-strategic-number sn-special-attack-type3 1) | |
; (set-strategic-number sn-special-attack-influence3 10000) | |
(chat-to-player my-player-number "Retargeting to player with wonder.") | |
(set-goal retargetenemy 3)); blocks retargeting to closest player | |
(defrule | |
(goal retargetenemy 3); wonder/relics | |
(up-compare-goal victory-time >= 0) | |
(up-compare-goal victory-time < 1000) | |
(goal under-attack-goal 0) | |
(or (players-building-type-count target-player wonder > 0) | |
(and (enemy-captured-relics) | |
(players-building-type-count target-player monastery > 0))) | |
(strategic-number sn-maximum-town-size < 40) | |
(up-compare-goal attack-goal < 1) | |
=> | |
(set-goal attack-goal 1) | |
(up-reset-unit c: -1));max-ts? | |
#end-if | |
#load-if-defined KING-OF-THE-HILL | |
(defrule | |
(up-compare-goal victory-time >= 0) | |
(up-compare-goal victory-time < 1000); someone has the monument | |
(players-building-count any-enemy > 0) | |
(or (strategic-number sn-target-player-number != winning-player) | |
(strategic-number sn-focus-player-number != winning-player)) | |
=> | |
(up-modify-sn sn-target-player-number g:= winning-player) | |
(up-modify-sn sn-focus-player-number g:= winning-player) | |
(chat-to-player my-player-number "Retargeting to player with monument.") | |
(set-goal retargetenemy 4)); blocks retargeting to closest player | |
#end-if | |
(defrule | |
(or (strategic-number sn-target-player-number == 0) | |
(or (player-resigned target-player) | |
(or (not (player-valid target-player)) | |
(not (player-in-game target-player))))) | |
(player-in-game any-enemy) | |
(players-building-count any-enemy > 0) | |
=> | |
(set-goal retargetenemy yes) | |
(up-find-player enemy find-closest closest-enemy-goal) | |
(up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
(up-modify-sn sn-focus-player-number g:= closest-enemy-goal) | |
; (up-chat-data-to-self "Focus-player: %d" g: closest-enemy-goal) | |
; (chat-to-player every-computer "Retargeting to the closest living enemy.") | |
) | |
(defrule | |
(or (stance-toward target-player ally) | |
(players-building-count target-player <= 0)) | |
(player-in-game any-enemy) | |
(players-building-count any-enemy > 0) | |
=> | |
(set-goal retargetenemy yes) | |
(up-find-player enemy find-closest closest-enemy-goal) | |
(up-modify-sn sn-target-player-number g:= closest-enemy-goal) | |
(up-modify-sn sn-focus-player-number g:= closest-enemy-goal) | |
; (up-chat-data-to-self "Focus-player: %d" g: closest-enemy-goal) | |
; (chat-to-player every-computer "Retargeting to the closest living enemy.") | |
) | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(strategic-number sn-number-attack-groups > 0) | |
(strategic-number sn-maximum-town-size < 40) | |
(up-compare-goal attack-goal < 2) | |
(nand (strategic-number sn-target-evaluation-ally-proximity > 0) | |
(up-timer-status help-ally-timer == timer-running)) | |
=> | |
(set-strategic-number sn-number-attack-groups 0) | |
(set-goal retreat-now-goal 1) | |
) | |
#end-if | |
(defrule | |
(strategic-number sn-target-player-number != 0) | |
(timer-triggered help-ally-timer) | |
(timer-triggered attack-timer) | |
=> | |
(set-strategic-number sn-target-evaluation-ally-proximity 0) | |
) | |
(defrule | |
(goal retreat-now-goal 1) | |
(not (town-under-attack)) | |
(military-population >= 30) | |
(strategic-number sn-resource-control < 1) | |
(unit-type-count-total monk == 0); train a single monk for healing | |
(can-train monk) | |
=> | |
(train monk) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal retreat-now-goal 1) | |
(timer-triggered retreat-timer) | |
=> | |
(enable-timer retreat-timer 6) | |
(up-retreat-now) | |
(set-strategic-number sn-number-attack-groups 0) | |
(set-strategic-number sn-enemy-sighted-response-distance 0) | |
(set-strategic-number sn-maximum-town-size 12) | |
(set-goal retreat-now-goal 0) | |
(set-goal attack-status-goal retreat) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal retreat-now-goal 2) | |
(or (strategic-number sn-maximum-town-size >= 40) | |
(strategic-number sn-number-attack-groups > 0)) | |
(timer-triggered retreat-timer) | |
=> | |
(enable-timer retreat-timer 6) | |
(up-retreat-now) | |
(set-strategic-number sn-number-attack-groups 0) | |
(set-strategic-number sn-enemy-sighted-response-distance 0) | |
(set-strategic-number sn-maximum-town-size 12) | |
(set-goal retreat-now-goal 0) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock == water-islands) | |
=> | |
(up-jump-rule 10); TSA doesn't work on islands | |
) | |
(defrule | |
(strategic-number sn-number-explore-groups <= 0) | |
(or (and (cc-players-unit-type-count 0 tree-class > 50) | |
(and (population > seventy-five-percent-pop) | |
(players-population target-player < twenty-five-percent-pop))) | |
(or (players-building-count every-enemy <= 0) | |
(and (player-in-game every-enemy) | |
(players-building-count any-enemy <= 0)))) | |
=> | |
(set-strategic-number sn-number-explore-groups 1)); search for the enemy to prevent him from hiding | |
(defrule | |
(strategic-number sn-number-explore-groups <= 0) | |
(player-in-game target-player) | |
(players-building-count target-player <= 0) | |
(strategic-number sn-number-explore-groups <= 0) | |
=> | |
(set-strategic-number sn-number-explore-groups 1)); search for the enemy to prevent him from hiding | |
(defrule | |
(nand (enemy-buildings-in-town) | |
(strategic-number sn-military-level >= 2)); else it may be a forward castle or sth like that | |
(or (unit-type-count castle-arrow > 0) | |
(or (unit-type-count castle-arrow-chemistry > 0) | |
(unit-type-count tc-arrow > 0))) | |
(population < del-civ-pop); shouldn't make a huge difference | |
=> | |
(up-jump-rule 2); or it won't react to town under attack | |
; (chat-local-to-self "Fortification fire detected, prevent attacks this rule pass.") | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(strategic-number sn-maximum-town-size < 680); 480 | |
(strategic-number sn-maximum-town-size >= 40) | |
(or (population >= del-civ-pop) | |
(or (map-size giant) | |
(map-size ludikris))) | |
(not (enemy-buildings-in-town)) | |
=> | |
(up-modify-sn sn-maximum-town-size c:+ tsa-increment) | |
(enable-timer reset-town-size-timer 92) | |
; debug (up-chat-data-to-self "TSA = %d" s: sn-maximum-town-size) | |
) | |
(defrule | |
(building-type-count town-center > 0) | |
(strategic-number sn-maximum-town-size < 680); 480 | |
(strategic-number sn-maximum-town-size >= 40) | |
(nor (population >= del-civ-pop) | |
(or (map-size giant) | |
(map-size ludikris))) | |
(not (enemy-buildings-in-town)) | |
=> | |
(up-modify-sn sn-maximum-town-size c:+ 6) | |
(enable-timer reset-town-size-timer 92) | |
; debug (up-chat-data-to-self "TSA = %d" s: sn-maximum-town-size) | |
) | |
#load-if-defined DEATH-MATCH | |
#load-if-not-defined POST-IMPERIAL-AGE-START | |
(defrule | |
(up-compare-goal attack-goal >= 2) | |
(strategic-number sn-target-player-number > 0) | |
(players-building-count target-player > 0) | |
(game-time < 900) | |
=> | |
(set-strategic-number sn-number-attack-groups 500) | |
(set-strategic-number sn-minimum-attack-group-size 1) | |
(set-strategic-number sn-maximum-attack-group-size 1) | |
(set-strategic-number sn-group-form-distance 5) | |
(set-goal attack-goal 0) | |
(set-goal attack-status-goal groups) | |
(enable-timer attack-timer 120) | |
) | |
#else | |
(defrule | |
(up-compare-goal attack-goal >= 2) | |
(strategic-number sn-target-player-number > 0) | |
(players-building-count target-player > 0) | |
(game-time < 420) | |
=> | |
(set-strategic-number sn-number-attack-groups 500) | |
(set-strategic-number sn-minimum-attack-group-size 1) | |
(set-strategic-number sn-maximum-attack-group-size 1) | |
(set-strategic-number sn-group-form-distance 5) | |
(set-goal attack-goal 0) | |
(set-goal attack-status-goal groups) | |
(enable-timer attack-timer 120) | |
) | |
#end-if | |
#end-if | |
(defrule | |
(up-compare-goal attack-goal >= 2) | |
(taunt-detected any-human-ally 36) | |
=> | |
(set-goal attack-goal 0) | |
) | |
(defrule ; A. | |
(up-compare-goal attack-goal >= 2000); disabled, rule not commented out because there's a jump above | |
(timer-triggered attack-timer); and i might enable the rule later again (>= 2) | |
(or (strategic-number sn-military-level >= 3); test | |
(or (players-building-type-count focus-player stone-wall-line >= 1) | |
(players-building-type-count focus-player 939 >= 1))); gates | |
(strategic-number sn-target-player-number > 0) | |
(players-building-count target-player > 0) | |
(strategic-number sn-number-attack-groups < 500) | |
=> | |
(set-strategic-number sn-number-attack-groups 500) | |
(set-strategic-number sn-minimum-attack-group-size 1) | |
(set-strategic-number sn-maximum-attack-group-size 1) | |
; (set-strategic-number sn-group-form-distance 5) | |
(set-goal attack-goal 0) | |
(set-goal attack-status-goal groups) | |
(enable-timer attack-timer 30) | |
) | |
(defrule | |
(goal attack-goal 2) | |
(timer-triggered attack-timer) | |
(strategic-number sn-target-player-number > 0) | |
(players-building-count target-player > 0) | |
(strategic-number sn-maximum-town-size < 40); got something else to reduce high town-size | |
=> | |
(set-goal attack-goal 0) | |
(set-goal attack-status-goal tsa) | |
(set-strategic-number sn-maximum-town-size 40) | |
(enable-timer attack-timer 30); 60 | |
(enable-timer reset-town-size-timer 92) | |
(chat-local-to-self "Starting TSA.") | |
) | |
(defrule | |
(goal attack-goal 4) | |
(timer-triggered attack-timer) | |
(strategic-number sn-target-player-number > 0) | |
(players-building-count target-player > 0) | |
(strategic-number sn-maximum-town-size < 40); got something else to reduce high town-size | |
=> | |
(set-goal attack-goal 0) | |
(set-goal attack-status-goal tsa) | |
(set-strategic-number sn-maximum-town-size 40) | |
(enable-timer attack-timer 30); 60 | |
(enable-timer reset-town-size-timer 92) | |
(chat-local-to-self "Starting TSA.") | |
) | |
(defrule | |
(timer-triggered attack-timer) | |
(strategic-number sn-maximum-town-size < 40) | |
(strategic-number sn-number-attack-groups > 0) | |
=> | |
(up-reset-unit c: -1) | |
(set-strategic-number sn-number-attack-groups 0) | |
(set-strategic-number sn-minimum-attack-group-size 0) | |
(set-goal attack-status-goal 0) | |
(chat-local-to-self "Reset units.") | |
) | |
(defrule | |
(timer-triggered reset-town-size-timer) | |
(population >= 140) | |
=> | |
(disable-timer reset-town-size-timer) | |
(up-reset-unit c: -1) | |
(set-strategic-number sn-number-attack-groups 0) | |
(set-strategic-number sn-group-form-distance 0) | |
(set-strategic-number sn-maximum-town-size 24) | |
(set-goal attack-status-goal 0) | |
(chat-local-to-self "Reset town size triggered.") | |
) | |
(defrule | |
(timer-triggered reset-town-size-timer) | |
(population >= 90) | |
=> | |
(disable-timer reset-town-size-timer) | |
(up-reset-unit c: -1) | |
(set-strategic-number sn-number-attack-groups 0) | |
(set-strategic-number sn-group-form-distance 0) | |
(set-strategic-number sn-maximum-town-size 20) | |
(set-goal attack-status-goal 0) | |
(chat-local-to-self "Reset town size triggered.") | |
) | |
(defrule | |
(timer-triggered reset-town-size-timer) | |
(population >= 60) | |
=> | |
(disable-timer reset-town-size-timer) | |
(up-reset-unit c: -1) | |
(set-strategic-number sn-number-attack-groups 0) | |
(set-strategic-number sn-group-form-distance 0) | |
(set-strategic-number sn-maximum-town-size 16) | |
(set-goal attack-status-goal 0) | |
(chat-local-to-self "Reset town size triggered.") | |
) | |
(defrule | |
(timer-triggered reset-town-size-timer) | |
=> | |
(disable-timer reset-town-size-timer) | |
(up-reset-unit c: -1) | |
(set-strategic-number sn-number-attack-groups 0) | |
(set-strategic-number sn-group-form-distance 0) | |
(set-strategic-number sn-maximum-town-size 10) | |
(set-goal attack-status-goal 0) | |
(chat-local-to-self "Reset town size triggered.") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed); not on islands | |
(strategic-number sn-military-level < 0) | |
(population < eighty-five-percent-pop) | |
=> | |
(set-strategic-number sn-task-ungrouped-soldiers 0) | |
(set-strategic-number sn-enemy-sighted-response-distance 0) | |
(set-strategic-number sn-sentry-distance 1) | |
) | |
(defrule | |
(game-time > 1200) | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(population > 50) | |
(population < 130) | |
(goal housing-goal 0) | |
(strategic-number sn-military-level < 0) | |
(military-population < 25) | |
(strategic-number sn-maximum-town-size > 20) | |
(strategic-number sn-maximum-town-size < 40) | |
(unit-type-count tc-arrow == 0) | |
(goal increase-town-size-goal 0); otherwise we can't build anything and lose as well. | |
=> | |
(set-strategic-number sn-maximum-town-size 20) | |
(set-strategic-number sn-defense-distance 0) | |
(set-strategic-number sn-enemy-sighted-response-distance 0) | |
; (set-strategic-number sn-cap-civilian-builders 10) | |
; (chat-to-player my-player-number "outnumbered - maximum TS = 18") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(current-age == feudal-age) | |
(goal strategy-goal flush) | |
(or (goal enemy-goal flush) | |
(strategic-number sn-archer-threat > 1)) | |
(players-current-age any-enemy == castle-age) | |
(strategic-number sn-maximum-town-size == 7) | |
(timer-triggered one-minute-timer) | |
=> | |
(up-retreat-now) | |
) | |
; NAVY MANAGEMENT | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-mixed) | |
=> | |
(up-jump-rule 6) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(warboat-count > 4) | |
(or (game-time < 1260) | |
(warboat-count > 9)) | |
(or (game-time < 1620) | |
(warboat-count > 15)) | |
(or (game-time < 2000) | |
(warboat-count > 21)) | |
(or (game-time < 2700) | |
(strategic-number sn-minimum-water-body-size-for-dock == water-mixed)); not likely to get more ships on mixed maps | |
=> | |
(set-goal attack-goal 6) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(game-time > 2100) | |
(warboat-count > 40) | |
(or (or (players-unit-type-count any-enemy galley-line > 12); eliminate remaining ships | |
(players-unit-type-count any-enemy fire-ship-line > 12)) | |
(or (unit-type-count cannon-galleon-line > 7); or bring cannon-galleons against castles/tower | |
(not (research-available ri-cannon-galleon)))) | |
=> | |
(set-goal attack-goal 6) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(goal attack-goal 6) | |
(timer-triggered attack-timer) | |
(players-unit-type-count any-enemy galley-line < 15) | |
(players-unit-type-count any-enemy fire-ship-line < 15) | |
(unit-type-count transport-ship > 0) | |
(soldier-count >= 10) | |
=> | |
(set-strategic-number sn-percent-attack-soldiers 100) | |
(set-strategic-number sn-group-form-distance 30) | |
(set-strategic-number sn-attack-group-gather-spacing 30) | |
(attack-now) | |
(enable-timer attack-timer 240); 300 | |
(set-strategic-number sn-special-attack-type2 -1) | |
(chat-local-to-self "Utilizing transports.") | |
) | |
(defrule | |
(goal attack-goal 6) | |
(timer-triggered navy-attack-timer) | |
(up-compare-goal threat-target-goal != warship-class) | |
(players-building-count any-enemy > 0) | |
(nand (cc-players-unit-type-count target-player castle-arrow > 0);(up-projectile-detected projectile-castle c:< 30000) | |
;(and | |
(unit-type-count cannon-galleon-line == 0) | |
;(up-projectile-target projectile-castle == warship-class);) provisory | |
) | |
=> | |
(set-strategic-number sn-minimum-boat-attack-group-size 1) | |
(set-strategic-number sn-maximum-boat-attack-group-size 1) | |
; (set-strategic-number sn-percent-attack-boats 100) | |
(set-strategic-number sn-number-boat-attack-groups 500) | |
(enable-timer navy-attack-timer 10) | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands) | |
(unit-type-count 42 == 0) | |
(or (goal threat-target-goal cavalry-unit-class); Enemy fighting our units with non warships | |
(goal threat-target-goal infantry-class)); This assumes we have successfully landed on the enemy island | |
(up-compare-goal threat-source-goal != warship-class) | |
(timer-triggered retreat-timer) | |
(unit-type-count transport-ship > 0) | |
=> | |
(up-reset-unit c: -1); disable the attack, attack now groups react horrible | |
(enable-timer retreat-timer 120) | |
(enable-timer attack-timer 60) | |
) | |
(defrule | |
(strategic-number sn-number-boat-attack-groups > 0) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-mixed) | |
(up-compare-goal attack-goal != 6) | |
=> | |
(set-strategic-number sn-minimum-boat-attack-group-size 0) | |
(set-strategic-number sn-maximum-boat-attack-group-size 0) | |
(set-strategic-number sn-number-boat-attack-groups 0) | |
; (set-strategic-number sn-percent-attack-boats 0) | |
) | |
;spread military to prevent blocking | |
(defrule | |
(goal spread-military-goal 0) | |
(timer-triggered spread-military-timer) | |
=> | |
(disable-timer spread-military-timer) | |
(set-strategic-number sn-task-ungrouped-soldiers 1) | |
(set-goal spread-military-goal 1) | |
(enable-timer spread-military-timer 3));5 | |
(defrule | |
(goal spread-military-goal 1) | |
(timer-triggered spread-military-timer) | |
=> | |
(disable-timer spread-military-timer) | |
(set-strategic-number sn-task-ungrouped-soldiers 0) | |
(set-goal spread-military-goal 0); use a goal because sn-task-ungrouped-soldiers is always 1 when used as a fact | |
(enable-timer spread-military-timer spread-interval) | |
) | |
; check if out town under attack and not an annoying wolf | |
(defrule | |
(goal under-attack-goal 0) | |
(strategic-number sn-maximum-town-size < 40) | |
(players-military-population any-enemy > 1) | |
(town-under-attack) | |
=> | |
(set-goal under-attack-goal 2) | |
(enable-timer under-attack-timer 30) | |
) | |
(defrule | |
(town-under-attack) | |
(not (timer-triggered under-attack-timer)) | |
(goal under-attack-goal 3) | |
=> | |
(set-strategic-number sn-target-evaluation-ally-proximity 0) | |
(set-goal under-attack-goal 1) | |
(chat-local-to-self "attack was not over yet") | |
) | |
(defrule | |
(timer-triggered under-attack-timer) | |
(town-under-attack) | |
(population > 25) | |
=> | |
(set-strategic-number sn-target-evaluation-ally-proximity 0) | |
(disable-timer under-attack-timer) | |
(enable-timer under-attack-timer 20) | |
(set-goal under-attack-goal 1) | |
) | |
(defrule | |
(timer-triggered under-attack-timer) | |
(town-under-attack) | |
(population < 26) | |
=> | |
(set-strategic-number sn-target-evaluation-ally-proximity 0) | |
(disable-timer under-attack-timer) | |
(enable-timer under-attack-timer 20) | |
(set-goal under-attack-goal 1) | |
) | |
(defrule | |
(not (town-under-attack)) | |
(goal under-attack-goal 1) | |
=> | |
(enable-timer under-attack-timer 60) | |
(set-goal under-attack-goal 3) | |
) | |
(defrule | |
(or (strategic-number sn-maximum-town-size >= 40) | |
(or (and (timer-triggered under-attack-timer) | |
(goal under-attack-goal 3)) | |
(and (not (town-under-attack)) | |
(goal under-attack-goal 2)))) | |
=> | |
(disable-timer under-attack-timer) | |
(set-goal under-attack-goal 0) | |
) | |
(defrule | |
(or (strategic-number sn-maximum-town-size >= 40) | |
(strategic-number sn-number-attack-groups >= 1)) | |
(up-compare-goal team-coordination-goal != 1) | |
=> | |
(set-goal team-coordination-goal 1) | |
) | |
(defrule | |
(or (or (taunt-detected any-ally 222); if we could help, this taunt would have been acknowledged by now | |
(taunt-detected any-ally 211)) | |
(or (taunt-detected any-ally 31) | |
(taunt-detected any-ally 100))) | |
(up-compare-goal team-coordination-goal != 1); not attacking | |
=> | |
(acknowledge-taunt this-any-ally 222) | |
(acknowledge-taunt this-any-ally 211) | |
(acknowledge-taunt this-any-ally 31) | |
(acknowledge-taunt this-any-ally 100) | |
(set-strategic-number sn-target-evaluation-ally-proximity 0) | |
(chat-to-allies-using-id 22118); "Alas, I cannot help that at this time." | |
) | |
(defrule | |
(or (or (taunt-detected any-ally 222); if we could help, this taunt would have been acknowledged by now | |
(taunt-detected any-ally 211)) | |
(or (taunt-detected any-ally 31) | |
(taunt-detected any-ally 100))) | |
(goal team-coordination-goal 1); attacking | |
=> | |
(acknowledge-taunt this-any-ally 222) | |
(acknowledge-taunt this-any-ally 211) | |
(acknowledge-taunt this-any-ally 31) | |
(acknowledge-taunt this-any-ally 100) | |
(set-strategic-number sn-target-evaluation-ally-proximity 1) | |
(chat-to-allies-using-id 22153); "At once, sire!" | |
) | |
(defrule | |
; (game-time > 2) | |
(player-in-game any-ally) | |
(not (taunt-detected any-ally 31)) | |
(up-compare-goal team-coordination-goal == 1); attacking | |
(goal attackchat 1) | |
=> | |
(set-goal attackchat 0) | |
(chat-to-player every-ally "31") | |
(chat-to-player-using-id every-ally 22117); "Attack now!" | |
(enable-timer attack-chat 300)); don't be too annoying | |
(defrule | |
(timer-triggered attack-chat) | |
=> | |
(disable-timer attack-chat) | |
(set-goal attackchat 1)) | |
(defrule | |
(population < del-civ-pop) | |
(goal under-attack-goal 1) | |
(goal defendchat yes) | |
=> | |
; test (chat-to-player every-computer "31"); use this because every-computer-ally doesn't exist | |
(chat-to-player every-computer "222"); but enemies won't react to this taunt anyway | |
(chat-to-player-using-id every-ally 22115); "Help! The enemy is in my town!" | |
(set-goal defendchat no) | |
(enable-timer defend-timer 150)) | |
(defrule | |
(timer-triggered defend-timer) | |
=> | |
(disable-timer defend-timer) | |
(set-goal defendchat yes)) | |
; ********** OPTIONAL CHEATS *********** | |
#load-if-defined DIFFICULTY-HARDEST | |
(defrule | |
(taunt-detected any-human 200) | |
=> | |
(chat-to-all "Taunt 200 detected - Cheats enabled!") | |
(disable-self)) | |
#else | |
(defrule | |
(taunt-detected any-human 200) | |
=> | |
(chat-to-all "Taunt 200 cheats only work on the 'hardest' difficulty level.") | |
(acknowledge-taunt this-any-human 200)) | |
#end-if | |
(defrule | |
(taunt-detected any-human 200) | |
(building-type-count town-center < 1) | |
(building-type-count lumber-camp < 1); landnomad | |
(building-type-count-total lumber-camp >= 1) | |
=> | |
(cc-add-resource wood 50) | |
(cc-add-resource food 125) | |
(disable-self)) | |
(defrule | |
(taunt-detected any-human 200) | |
(game-time >= 360) | |
=> | |
(cc-add-resource wood 100) | |
(cc-add-resource food 130) | |
(disable-self)) | |
(defrule | |
(taunt-detected any-human 200) | |
(game-time >= 420) | |
=> | |
(cc-add-resource wood 40) | |
(cc-add-resource food 100) | |
(cc-add-resource gold 40) | |
(cc-add-resource stone 5) | |
(disable-self)) | |
(defrule | |
(taunt-detected any-human 200) | |
(or (game-time >= 480) | |
(or (current-age >= feudal-age) | |
(or (players-current-age any-enemy >= feudal-age) | |
(players-current-age any-ally >= feudal-age)))) | |
(timer-triggered thirty) | |
=> | |
(cc-add-resource wood 30) | |
(cc-add-resource food 30) | |
(cc-add-resource gold 30) | |
(cc-add-resource stone 5)) | |
; ********** HUMAN COOPERATION *********** | |
(defrule | |
(nor (taunt-detected any-human-ally 231) | |
(or (taunt-detected any-human-ally 232) | |
(or (taunt-detected any-human-ally 233) | |
(or (taunt-detected any-human-ally 234) | |
(or (taunt-detected any-human-ally 235) | |
(or (taunt-detected any-human-ally 236) | |
(or (taunt-detected any-human-ally 237) | |
(taunt-detected any-human-ally 238)))))))) | |
=> | |
(up-jump-rule 8)) | |
(defrule | |
(taunt-detected any-human-ally 231) | |
(nor (stance-toward 1 ally) | |
(player-number 1)) | |
(player-in-game 1) | |
(players-building-count 1 >= 1); eligible for targeting | |
=> | |
(set-strategic-number sn-target-player-number 1) | |
(set-strategic-number sn-focus-player-number 1) | |
(set-goal retargetenemy 4); block retargeting | |
(chat-to-allies "I will target this enemy for 10 minutes.") | |
(chat-to-allies "If i don't kill him faster than that...") | |
; (chat-to-allies-using-id 22153); "At once, sire!" | |
(enable-timer human-coop-timer 600) | |
(acknowledge-taunt every-ally 231)) | |
(defrule | |
(taunt-detected any-human-ally 232) | |
(nor (stance-toward 2 ally) | |
(player-number 2)) | |
(player-in-game 2) | |
(players-building-count 2 >= 1); eligible for targeting | |
=> | |
(set-strategic-number sn-target-player-number 2) | |
(set-strategic-number sn-focus-player-number 2) | |
(set-goal retargetenemy 4); block retargeting | |
(chat-to-allies "I will target this enemy for 10 minutes.") | |
(chat-to-allies "If i don't kill him faster than that...") | |
; (chat-to-allies-using-id 22153); "At once, sire!" | |
(enable-timer human-coop-timer 600) | |
(acknowledge-taunt every-ally 232)) | |
(defrule | |
(taunt-detected any-human-ally 233) | |
(nor (stance-toward 3 ally) | |
(player-number 3)) | |
(player-in-game 3) | |
(players-building-count 3 >= 1); eligible for targeting | |
=> | |
(set-strategic-number sn-target-player-number 3) | |
(set-strategic-number sn-focus-player-number 3) | |
(set-goal retargetenemy 4); block retargeting | |
(chat-to-allies "I will target this enemy for 10 minutes.") | |
(chat-to-allies "If i don't kill him faster than that...") | |
; (chat-to-allies-using-id 22153); "At once, sire!" | |
(enable-timer human-coop-timer 600) | |
(acknowledge-taunt every-ally 233)) | |
(defrule | |
(taunt-detected any-human-ally 234) | |
(nor (stance-toward 4 ally) | |
(player-number 4)) | |
(player-in-game 4) | |
(players-building-count 4 >= 1); eligible for targeting | |
=> | |
(set-strategic-number sn-target-player-number 4) | |
(set-strategic-number sn-focus-player-number 4) | |
(set-goal retargetenemy 4); block retargeting | |
(chat-to-allies "I will target this enemy for 10 minutes.") | |
(chat-to-allies "If i don't kill him faster than that...") | |
; (chat-to-allies-using-id 22153); "At once, sire!" | |
(enable-timer human-coop-timer 600) | |
(acknowledge-taunt every-ally 234)) | |
(defrule | |
(taunt-detected any-human-ally 235) | |
(nor (stance-toward 5 ally) | |
(player-number 5)) | |
(player-in-game 5) | |
(players-building-count 5 >= 1); eligible for targeting | |
=> | |
(set-strategic-number sn-target-player-number 5) | |
(set-strategic-number sn-focus-player-number 5) | |
(set-goal retargetenemy 4); block retargeting | |
(chat-to-allies "I will target this enemy for 10 minutes.") | |
(chat-to-allies "If i don't kill him faster than that...") | |
; (chat-to-allies-using-id 22153); "At once, sire!" | |
(enable-timer human-coop-timer 600) | |
(acknowledge-taunt every-ally 235)) | |
(defrule | |
(taunt-detected any-human-ally 236) | |
(nor (stance-toward 6 ally) | |
(player-number 6)) | |
(player-in-game 6) | |
(players-building-count 6 >= 1); eligible for targeting | |
=> | |
(set-strategic-number sn-target-player-number 6) | |
(set-strategic-number sn-focus-player-number 6) | |
(set-goal retargetenemy 4); block retargeting | |
(chat-to-allies "I will target this enemy for 10 minutes.") | |
(chat-to-allies "If i don't kill him faster than that...") | |
; (chat-to-allies-using-id 22153); "At once, sire!" | |
(enable-timer human-coop-timer 600) | |
(acknowledge-taunt every-ally 236)) | |
(defrule | |
(taunt-detected any-human-ally 237) | |
(nor (stance-toward 7 ally) | |
(player-number 7)) | |
(player-in-game 7) | |
(players-building-count 7 >= 1); eligible for targeting | |
=> | |
(set-strategic-number sn-target-player-number 7) | |
(set-strategic-number sn-focus-player-number 7) | |
(set-goal retargetenemy 4); block retargeting | |
(chat-to-allies "I will target this enemy for 10 minutes.") | |
(chat-to-allies "If i don't kill him faster than that...") | |
; (chat-to-allies-using-id 22153); "At once, sire!" | |
(enable-timer human-coop-timer 600) | |
(acknowledge-taunt every-ally 237)) | |
(defrule | |
(taunt-detected any-human-ally 238) | |
(nor (stance-toward 8 ally) | |
(player-number 8)) | |
(player-in-game 8) | |
(players-building-count 8 >= 1); eligible for targeting | |
=> | |
(set-strategic-number sn-target-player-number 8) | |
(set-strategic-number sn-focus-player-number 8) | |
(set-goal retargetenemy 4); block retargeting | |
(chat-to-allies "I will target this enemy for 10 minutes.") | |
(chat-to-allies "If i don't kill him faster than that...") | |
; (chat-to-allies-using-id 22153); "At once, sire!" | |
(enable-timer human-coop-timer 600) | |
(acknowledge-taunt every-ally 238)) | |
(defrule; not an enemy / not alive / ... | |
(or (taunt-detected any-human-ally 231) | |
(or (taunt-detected any-human-ally 232) | |
(or (taunt-detected any-human-ally 233) | |
(taunt-detected any-human-ally 234)))) | |
=> | |
(chat-to-allies "That is not a valid target player.") | |
; (chat-to-allies-using-id 22118); "Alas, I cannot help that at this time." | |
(acknowledge-taunt every-ally 231) | |
(acknowledge-taunt every-ally 232) | |
(acknowledge-taunt every-ally 233) | |
(acknowledge-taunt every-ally 234)) | |
(defrule; not an enemy / not alive / ... | |
(or (taunt-detected any-human-ally 235) | |
(or (taunt-detected any-human-ally 236) | |
(or (taunt-detected any-human-ally 237) | |
(taunt-detected any-human-ally 238)))) | |
=> | |
(chat-to-allies "That is not a valid target player.") | |
; (chat-to-allies-using-id 22118); "Alas, I cannot help that at this time." | |
(acknowledge-taunt every-ally 235) | |
(acknowledge-taunt every-ally 236) | |
(acknowledge-taunt every-ally 237) | |
(acknowledge-taunt every-ally 238)) | |
(defrule | |
(timer-triggered human-coop-timer) | |
=> | |
(disable-timer human-coop-timer) | |
(chat-to-allies "I will select a target enemy on my own again.") | |
(set-goal retargetenemy yes)); allow retargeting | |
; ********** INCREASE TS CODE ********** | |
#load-if-defined DEATH-MATCH | |
(defrule | |
(up-compare-goal increase-town-size-goal != 0) | |
(or (and (current-age == castle-age) | |
(current-age-time < 30)) | |
(or (current-age < castle-age) | |
(starting-age == post-imperial-age))) | |
=> | |
(set-goal increase-town-size-goal 0); don't increase TS too early in DM, as there might be more building rules than builders! | |
) | |
#else | |
; in PIDM increase TS according to game time, everything else will be too slow | |
;These rules increase town-size by population as our TS increase system doesn't cover houses and farms | |
; Compact TS and prevent enemy lure us when under outnumbered. | |
(defrule | |
(strategic-number sn-maximum-town-size < pop60-town-size); Promisory debug backup | |
(or | |
(or | |
(population > 60) | |
(housing-headroom < 5) | |
) | |
(and | |
(strategic-number sn-military-level >= 0) | |
(building-type-count town-center > 1) | |
) | |
) | |
(population >= 40) | |
(population <= 90) | |
=> | |
(disable-timer reset-town-size-timer) | |
(set-strategic-number sn-maximum-town-size pop60-town-size) | |
) | |
(defrule | |
(or | |
(population > 90) | |
(and | |
(strategic-number sn-military-level >= 0) | |
(building-type-count town-center > 2) | |
) | |
) | |
(strategic-number sn-maximum-town-size < pop90-town-size) | |
=> | |
(set-strategic-number sn-maximum-town-size pop90-town-size) | |
) | |
(defrule | |
(or | |
(population > 120) | |
(and | |
(strategic-number sn-military-level >= 0) | |
(building-type-count town-center > 3) | |
) | |
) | |
(strategic-number sn-maximum-town-size < pop120-town-size) | |
=> | |
(set-strategic-number sn-maximum-town-size pop120-town-size) | |
) | |
(defrule | |
(game-time < 1800) | |
(building-type-count town-center > 0) | |
(goal strategy-goal flush) | |
(strategic-number sn-military-level < 0) | |
(strategic-number sn-allow-civilian-offense != 2) | |
(goal increase-town-size-goal 0); otherwise we can't build anything and lose as well. | |
=> | |
(set-strategic-number sn-maximum-town-size 7) | |
(set-strategic-number sn-task-ungrouped-soldiers 0) | |
(set-strategic-number sn-enemy-sighted-response-distance 0) | |
; (chat-to-player my-player-number "outnumbered - maximum TS = 7") | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(current-age == feudal-age) | |
(goal strategy-goal flush) | |
(or | |
(goal enemy-goal flush) | |
(strategic-number sn-archer-threat > 1) | |
) | |
(players-current-age every-enemy == castle-age) | |
(goal housing-goal 0) | |
(strategic-number sn-maximum-town-size > 7) | |
(goal increase-town-size-goal 0); otherwise we can't build anything and lose as well. | |
=> | |
(set-strategic-number sn-maximum-town-size 7) | |
(set-strategic-number sn-task-ungrouped-soldiers 0) | |
(set-strategic-number sn-enemy-sighted-response-distance 0) | |
(chat-to-player my-player-number "enemy castled faster, stay defenseive - maximum TS = 7") | |
) | |
(defrule | |
(or | |
(up-compare-goal increase-town-size-goal != 0); need to build something | |
(or | |
(strategic-number sn-military-level >= 0); military situation normalized | |
(military-population >= 6) | |
) | |
) | |
(strategic-number sn-maximum-town-size < 8) | |
=> | |
(set-strategic-number sn-maximum-town-size 12); make room for buildings | |
) | |
#end-if | |
(defrule | |
(population > max-civ-pop) | |
(or | |
(unit-type-count castle-arrow > 0) | |
(unit-type-count castle-arrow-chemistry > 0) | |
) | |
(strategic-number sn-maximum-town-size <= 39) | |
=> | |
(set-strategic-number sn-maximum-town-size 39) | |
(set-strategic-number sn-sentry-distance 12) | |
(set-strategic-number sn-enemy-sighted-response-distance 32) | |
) | |
(defrule | |
(strategic-number sn-military-level >= 0) | |
=> | |
(set-strategic-number sn-sentry-distance 12) | |
(set-strategic-number sn-enemy-sighted-response-distance 32) | |
) | |
(defrule | |
(taunt-detected my-player-number 247) | |
=> | |
(up-chat-data-to-player my-player-number "Food%: %d %" s: sn-food-gatherer-percentage) | |
(up-chat-data-to-player my-player-number "Wood%: %d %" s: sn-wood-gatherer-percentage) | |
(up-chat-data-to-player my-player-number "Gold%: %d %" s: sn-gold-gatherer-percentage) | |
(up-chat-data-to-player my-player-number "Stone%: %d %" s: sn-stone-gatherer-percentage) | |
(acknowledge-taunt my-player-number 247)) | |
(defrule | |
(taunt-detected my-player-number 248) | |
=> | |
(up-chat-data-to-player my-player-number "increase-town-size-goal: %d" g: increase-town-size-goal) | |
(up-chat-data-to-player my-player-number "sn-military-level: %d" s: sn-military-level) | |
(up-chat-data-to-player my-player-number "sn-resource-control: %d" s: sn-resource-control) | |
(up-chat-data-to-player my-player-number "sn-minimum-water-body-size-for-dock: %d" s: sn-minimum-water-body-size-for-dock) | |
(acknowledge-taunt my-player-number 248)) | |
(defrule | |
(idle-farm-count <= 0); provisory | |
(wood-amount >= 295); super provisory, hopefully keeping it safe and better than nothing ; needs changes | |
(goal farm-goal 1); provisory | |
(strategic-number sn-maximum-town-size < 31) | |
(building-type-count farm > 8) | |
(up-compare-goal threat-time-goal > 30000) | |
=> | |
(set-strategic-number sn-maximum-town-size 31) | |
(enable-timer reset-town-size-timer 3) | |
) | |
(defrule | |
(goal increase-town-size-goal watch-tower) | |
=> | |
(up-jump-rule 4) | |
) | |
(defrule | |
(strategic-number sn-maximum-town-size < 37) | |
(up-compare-goal increase-town-size-goal != 2) | |
(goal housing-goal 1) | |
(building-type-count town-center >= 1) | |
(up-pending-objects c: house < 1) | |
(wood-amount >= 30) | |
=> | |
(up-modify-sn sn-maximum-town-size c:+ 2) | |
(up-chat-data-to-player my-player-number "build town-size = %d" s: sn-maximum-town-size) | |
) | |
(defrule | |
(or (and (strategic-number sn-maximum-town-size < 40) | |
(goal increase-town-size-goal 2)) | |
(goal increase-town-size-goal house)) | |
=> | |
(set-goal increase-town-size-goal 0); building already placed, no need to increase TS | |
(disable-timer increase-town-size-timer) | |
) | |
(defrule | |
(timer-triggered increase-town-size-timer) | |
(or (strategic-number sn-maximum-town-size < 37) | |
(strategic-number sn-minimum-water-body-size-for-dock >= water-islands)) | |
(strategic-number sn-maximum-town-size < 57) | |
(up-compare-goal increase-town-size-goal != 0) | |
(strategic-number sn-maximum-town-size >= 7) | |
=> | |
(enable-timer increase-town-size-timer 4) | |
(set-goal increase-town-size-goal 0) | |
(up-modify-sn sn-maximum-town-size c:+ 2) | |
(up-chat-data-to-self "build-town-size = %d." s: sn-maximum-town-size) | |
) | |
(defrule | |
(current-age == dark-age) | |
(building-type-count town-center > 0) | |
(building-type-count-total mill == 0) | |
(strategic-number sn-mill-max-distance > 30) | |
(wood-amount > 300) | |
=> | |
(set-strategic-number sn-mill-max-distance 8); reduce distance in case it couldn't be built due to insufficient exploration. | |
) | |
(defrule | |
(strategic-number sn-minimum-civilian-explorers > 0) | |
(or (and (or (unit-type-count 958 > 1); livestock | |
(resource-found food)) | |
(strategic-number sn-mill-max-distance < 31)) | |
(timer-triggered civ-explore-timer)) | |
(building-type-count town-center >= 1); -total | |
=> | |
(disable-timer civ-explore-timer) | |
(set-strategic-number sn-minimum-civilian-explorers 0) | |
(set-strategic-number sn-percent-civilian-gatherers 0) | |
(set-strategic-number sn-percent-civilian-builders 0) | |
(set-strategic-number sn-percent-civilian-explorers 0) | |
) | |
(defrule | |
(game-time > 600) | |
(building-type-count-total town-center > 0) | |
(building-type-count town-center == 0) | |
(building-type-count farm > 0) | |
(population < 20) | |
=> | |
(delete-building farm); delete all farms to prevent losing villagers by walking back into the old town | |
(delete-building farm) | |
(delete-building farm) | |
(delete-building farm) | |
(delete-building farm) | |
(delete-building farm) | |
(delete-building farm) | |
(delete-building farm) | |
(delete-building farm) | |
(delete-building farm) | |
(delete-building farm) | |
) | |
(defrule | |
(up-pending-objects c: lumber-camp < 1) | |
(game-time > 33) | |
(resource-found wood) | |
(building-type-count-total town-center == 0) | |
(or (building-type-count-total lumber-camp == 0) | |
(dropsite-min-distance wood > 10)) | |
(can-build lumber-camp) | |
=> | |
(set-strategic-number sn-allow-adjacent-dropsites 0); hmm, may be better here for less blocking | |
(build lumber-camp) | |
(up-assign-builders c: lumber-camp c: 6) | |
(set-strategic-number sn-maximum-wood-drop-distance -1) | |
(set-strategic-number sn-minimum-civilian-explorers 0) | |
(set-strategic-number sn-percent-civilian-gatherers 0) | |
(set-strategic-number sn-percent-civilian-builders 100) | |
(set-strategic-number sn-percent-civilian-explorers 0) | |
) | |
(defrule | |
; (building-type-count-total town-center >= 1) | |
; (up-pending-objects c: town-center >= 1) | |
(building-type-count town-center >= 1); temporary work-around | |
(goal nomad yes) | |
=> | |
(release-escrow wood) | |
(set-escrow-percentage wood 0) | |
(set-goal escrow-purpose-goal 0) | |
(set-strategic-number sn-mill-max-distance 31) | |
(set-strategic-number sn-maximum-town-size 30) | |
(set-strategic-number sn-camp-max-distance 35) | |
(set-strategic-number sn-percent-civilian-explorers 0) | |
(set-strategic-number sn-maximum-wood-drop-distance 25) | |
(set-strategic-number sn-minimum-civilian-explorers 0) | |
(disable-self) ; part of the work-around | |
) | |
(defrule | |
(strategic-number sn-minimum-water-body-size-for-dock < water-islands) | |
(goal increase-town-size-goal 2); building placed | |
(strategic-number sn-maximum-town-size >= 40); TSA in action | |
=> | |
(disable-timer increase-town-size-timer) | |
(set-strategic-number sn-maximum-town-size 18); build close | |
(set-goal increase-town-size-goal 0) | |
(enable-timer attack-timer 1); re-enable TSA immediately | |
(set-goal restart-attack-goal 1) | |
) | |
(defrule | |
(goal restart-attack-goal 1) | |
(strategic-number sn-target-evaluation-ally-proximity < 1) | |
(strategic-number sn-number-attack-groups > 0) | |
(strategic-number sn-minimum-attack-group-size > 1) | |
(strategic-number sn-maximum-town-size < 40) | |
=> | |
(up-reset-unit c: -1) | |
(set-strategic-number sn-number-attack-groups 0) | |
(set-strategic-number sn-minimum-attack-group-size 1) | |
(set-goal restart-attack-goal 0) | |
) | |
(defrule | |
(goal restart-attack-goal 1) | |
(strategic-number sn-target-evaluation-ally-proximity < 1) | |
=> | |
(set-goal restart-attack-goal 0) | |
) | |
(defrule | |
(building-type-count-total town-center == 0) | |
=> | |
(set-strategic-number sn-camp-max-distance 480) | |
(set-strategic-number sn-maximum-town-size 480) | |
; no (set-strategic-number sn-mill-max-distance 480) | |
(set-strategic-number sn-maximum-food-drop-distance 30) | |
(set-strategic-number sn-wood-gatherer-percentage 100) | |
(set-strategic-number sn-food-gatherer-percentage 0) | |
(set-strategic-number sn-gold-gatherer-percentage 0) | |
(set-escrow-percentage wood 100) | |
(set-goal escrow-purpose-goal town-center) | |
) | |
(defrule | |
(taunt-detected any-computer 248) | |
(not (taunt-detected my-player-number 248)) | |
=> | |
(up-chat-data-to-all "focus-player: %d" s: sn-focus-player-number) | |
(up-chat-data-to-all "target-player: %d" s: sn-target-player-number) | |
(up-chat-data-to-all "number of attack groups: %d" s: sn-number-attack-groups) | |
(up-chat-data-to-all "minimum attack group size: %d" s: sn-minimum-attack-group-size) | |
(up-chat-data-to-all "sentry distance: %d" s: sn-sentry-distance) | |
(up-chat-data-to-all "enemy sighted response distance: %d" s: sn-enemy-sighted-response-distance) | |
(up-chat-data-to-all "maximum town size: %d" s: sn-maximum-town-size) | |
(up-chat-data-to-all "increase-town-size-goal: %d" g: increase-town-size-goal) | |
(acknowledge-taunt this-any-computer 248) | |
) | |
(defrule | |
(taunt-detected my-player-number 202) | |
=> | |
(up-chat-data-to-player my-player-number "focus-player: %d" s: sn-focus-player-number) | |
(up-chat-data-to-player my-player-number "target-player: %d" s: sn-target-player-number) | |
(up-chat-data-to-player my-player-number "attack-goal: %d" g: attack-goal) | |
(up-chat-data-to-player my-player-number "position: %d" g: position-goal) | |
(up-chat-data-to-player my-player-number "sn-number-attack-groups: %d" s: sn-number-attack-groups) | |
(up-chat-data-to-player my-player-number "sn-maximum-town-size: %d" s: sn-maximum-town-size) | |
(up-chat-data-to-player my-player-number "increase-town-size-goal: %d" g: increase-town-size-goal) | |
(up-chat-data-to-player my-player-number "housing-goal: %d" g: housing-goal) | |
(acknowledge-taunt my-player-number 202)) | |
(defrule | |
(taunt-detected any-ally 203) | |
=> | |
(up-chat-data-to-all "focus-player: %d" s: sn-focus-player-number) | |
(up-chat-data-to-all "target-player: %d" s: sn-target-player-number) | |
(up-chat-data-to-all "attack-goal: %d" g: attack-goal) | |
(up-chat-data-to-all "position: %d" g: position-goal) | |
(up-chat-data-to-all "sn-number-attack-groups: %d" s: sn-number-attack-groups) | |
(up-chat-data-to-all "sn-maximum-town-size: %d" s: sn-maximum-town-size) | |
(up-chat-data-to-all "increase-town-size-goal: %d" g: increase-town-size-goal) | |
(up-chat-data-to-all "housing-goal: %d" g: housing-goal) | |
(acknowledge-taunt every-ally 203)) | |
(defrule | |
(taunt-detected my-player-number 204) | |
=> | |
(up-chat-data-to-player my-player-number "sn-camp-max-distance: %d" s: sn-camp-max-distance) | |
(up-chat-data-to-player my-player-number "sn-number-explore-groups: %d" s: sn-number-explore-groups) | |
(up-chat-data-to-player my-player-number "sn-total-number-explorers: %d" s: sn-total-number-explorers) | |
(up-chat-data-to-player my-player-number "sn-cap-civilian-explorers: %d" s: sn-cap-civilian-explorers) | |
(up-chat-data-to-player my-player-number "sn-percent-civilian-explorers: %d" s: sn-percent-civilian-explorers) | |
(up-chat-data-to-player my-player-number "sn-cap-civilian-gatherers: %d" s: sn-cap-civilian-gatherers) | |
(up-chat-data-to-player my-player-number "sn-percent-civilian-gatherers: %d" s: sn-percent-civilian-gatherers) | |
(up-chat-data-to-player my-player-number "sn-current-age: %d" s: sn-current-age) | |
(acknowledge-taunt my-player-number 204)) | |
(defrule | |
(taunt-detected my-player-number 246) | |
=> | |
(up-chat-data-to-player my-player-number "farm-goal: %d" g: farm-goal) | |
(up-chat-data-to-player my-player-number "sn-minimum-attack-group-size: %d" s: sn-minimum-attack-group-size) | |
(up-chat-data-to-player my-player-number "sn-sentry-distance: %d" s: sn-sentry-distance) | |
(up-chat-data-to-player my-player-number "sn-enemy-sighted-response-distance: %d" s: sn-enemy-sighted-response-distance) | |
(up-chat-data-to-player my-player-number "sn-minimum-water-body-size-for-dock: %d" s: sn-minimum-water-body-size-for-dock) | |
(up-chat-data-to-player my-player-number "team-coordination-goal: %d" g: team-coordination-goal) | |
(acknowledge-taunt my-player-number 246) | |
) | |
(defrule | |
(taunt-detected any-ally 247) | |
=> | |
(up-chat-data-to-all "farm-goal: %d" g: farm-goal) | |
(up-chat-data-to-all "sn-minimum-attack-group-size: %d" s: sn-minimum-attack-group-size) | |
(up-chat-data-to-all "sn-sentry-distance: %d" s: sn-sentry-distance) | |
(up-chat-data-to-all "sn-enemy-sighted-response-distance: %d" s: sn-enemy-sighted-response-distance) | |
(up-chat-data-to-all "sn-minimum-water-body-size-for-dock: %d" s: sn-minimum-water-body-size-for-dock) | |
(up-chat-data-to-all "team-coordination-goal: %d" g: team-coordination-goal) | |
(acknowledge-taunt every-ally 247) | |
) | |
#load-if-not-defined TEAMS-LOCKED | |
#load-if-not-defined UP-2-PLAYER-GAME | |
(defrule | |
(not (stance-toward 1 ally)) | |
(or (player-resigned 1) | |
(not (player-in-game 1))) | |
(players-military-population 1 < 2) | |
(players-building-type-count 1 castle < 1) | |
(players-building-type-count 1 watch-tower < 1) | |
(players-building-type-count 1 bombard-tower < 1) | |
(players-unit-type-count 1 monk < 1) | |
=> | |
(set-stance 1 ally) | |
) | |
(defrule | |
(not (stance-toward 2 ally)) | |
(or (player-resigned 2) | |
(not (player-in-game 2))) | |
(players-military-population 2 < 2) | |
(players-building-type-count 2 castle < 1) | |
(players-building-type-count 2 watch-tower < 1) | |
(players-building-type-count 2 bombard-tower < 1) | |
(players-unit-type-count 2 monk < 1) | |
=> | |
(set-stance 2 ally) | |
) | |
(defrule | |
(not (stance-toward 3 ally)) | |
(or (player-resigned 3) | |
(not (player-in-game 3))) | |
(players-military-population 3 < 2) | |
(players-building-type-count 3 castle < 1) | |
(players-building-type-count 3 watch-tower < 1) | |
(players-building-type-count 3 bombard-tower < 1) | |
(players-unit-type-count 3 monk < 1) | |
=> | |
(set-stance 3 ally) | |
) | |
(defrule | |
(not (stance-toward 4 ally)) | |
(or (player-resigned 4) | |
(not (player-in-game 4))) | |
(players-military-population 4 < 2) | |
(players-building-type-count 4 castle < 1) | |
(players-building-type-count 4 watch-tower < 1) | |
(players-building-type-count 4 bombard-tower < 1) | |
(players-unit-type-count 4 monk < 1) | |
=> | |
(set-stance 4 ally) | |
) | |
(defrule | |
(not (stance-toward 5 ally)) | |
(or (player-resigned 5) | |
(not (player-in-game 5))) | |
(players-military-population 5 < 2) | |
(players-building-type-count 5 castle < 1) | |
(players-building-type-count 5 watch-tower < 1) | |
(players-building-type-count 5 bombard-tower < 1) | |
(players-unit-type-count 5 monk < 1) | |
=> | |
(set-stance 5 ally) | |
) | |
(defrule | |
(not (stance-toward 6 ally)) | |
(or (player-resigned 6) | |
(not (player-in-game 6))) | |
(players-military-population 6 < 2) | |
(players-building-type-count 6 castle < 1) | |
(players-building-type-count 6 watch-tower < 1) | |
(players-building-type-count 6 bombard-tower < 1) | |
(players-unit-type-count 6 monk < 1) | |
=> | |
(set-stance 6 ally) | |
) | |
(defrule | |
(not (stance-toward 7 ally)) | |
(or (player-resigned 7) | |
(not (player-in-game 7))) | |
(players-military-population 7 < 2) | |
(players-building-type-count 7 castle < 1) | |
(players-building-type-count 7 watch-tower < 1) | |
(players-building-type-count 7 bombard-tower < 1) | |
(players-unit-type-count 7 monk < 1) | |
=> | |
(set-stance 7 ally) | |
) | |
(defrule | |
(not (stance-toward 8 ally)) | |
(or (player-resigned 8) | |
(not (player-in-game 8))) | |
(players-military-population 8 < 2) | |
(players-building-type-count 8 castle < 1) | |
(players-building-type-count 8 watch-tower < 1) | |
(players-building-type-count 8 bombard-tower < 1) | |
(players-unit-type-count 8 monk < 1) | |
=> | |
(set-stance 8 ally) | |
) | |
(defrule | |
(timer-triggered tribute-timer2) | |
=> | |
(disable-timer tribute-timer2)) | |
(defrule | |
(or (players-stance any-human-ally neutral) | |
(players-stance any-human-ally enemy)) | |
(up-timer-status tribute-timer2 != timer-running) | |
(goal stanceg 0) | |
=> | |
(chat-to-player-using-id this-any-human-ally 22017); "Set thy stance to Ally with me!" | |
(set-stance this-any-human-ally neutral) | |
(enable-timer stance 20) | |
(set-goal stanceg 1)) | |
(defrule | |
(nor (players-stance any-human-neutral ally) | |
(players-stance any-human-enemy ally)) | |
(up-compare-goal request == 1) | |
=> | |
(set-goal request 0)) | |
(defrule | |
(players-stance any-human-neutral ally) | |
(goal request 0) | |
(goal stanceg 0) | |
=> | |
(chat-to-player-using-id this-any-human-neutral 22004); "Send me 200 each of wood, food, gold, and stone!" | |
(chat-to-player-using-id this-any-human-neutral 22005); "If thou dost this thing, I shall join thy side." | |
(set-goal request 1)) | |
(defrule | |
(players-stance any-human-enemy ally) | |
(goal request 0) | |
(goal stanceg 0) | |
=> | |
(chat-to-player-using-id this-any-human-enemy 22006); "Send me 500 each of wood, food, gold, and stone!" | |
(chat-to-player-using-id this-any-human-enemy 22005); "If thou dost this thing, I shall join thy side." | |
(set-goal request 1)) | |
;(defrule | |
; (timer-triggered two-minute-timer) | |
; (game-time >= 300) | |
;; (random-number < 10); of 100 | |
; (goal request2 1) | |
;=> | |
; (chat-to-player-using-id every-human 2304); "Alas! We could have made an unstoppable team." | |
; (set-goal request2 0) | |
; (disable-self)) | |
(defrule | |
(timer-triggered two-minute-timer) | |
(game-time >= 300) | |
(not (stance-toward any-human ally)) | |
(or (players-population any-human >= 50) | |
(players-population any-human >= max-civ)) | |
(unit-type-count-total villager >= 1) | |
(random-number < 15); of 100 | |
(goal request2 0) | |
(players-building-type-count any-human market >= 1) | |
=> | |
(chat-to-player-using-id every-human 22006); "Send me 500 each of wood, food, gold, and stone!" | |
(chat-to-player-using-id every-human 22005); "If thou dost this thing, I shall join thy side." | |
(set-goal request2 1) | |
(disable-self)) | |
(defrule | |
(players-tribute-memory any-human-neutral wood >= 500) | |
(players-tribute-memory any-human-neutral food >= 500) | |
(players-tribute-memory any-human-neutral gold >= 500) | |
(players-tribute-memory any-human-neutral stone >= 500) | |
(goal request2 1) | |
=> | |
(clear-tribute-memory this-any-human-neutral wood) | |
(clear-tribute-memory this-any-human-neutral food) | |
(clear-tribute-memory this-any-human-neutral gold) | |
(clear-tribute-memory this-any-human-neutral stone) | |
(chat-to-player-using-id this-any-human-neutral 22002);"I am grateful for thy tribute." | |
(chat-to-player-using-id this-any-human-neutral 22003);"Let us be friends henceforth!" | |
(enable-timer tribute-timer2 10) | |
(set-stance this-any-human-enemy ally)) | |
(defrule | |
(players-tribute-memory any-human-enemy wood >= 500) | |
(players-tribute-memory any-human-enemy food >= 500) | |
(players-tribute-memory any-human-enemy gold >= 500) | |
(players-tribute-memory any-human-enemy stone >= 500) | |
(goal request2 1) | |
=> | |
(clear-tribute-memory this-any-human-enemy wood) | |
(clear-tribute-memory this-any-human-enemy food) | |
(clear-tribute-memory this-any-human-enemy gold) | |
(clear-tribute-memory this-any-human-enemy stone) | |
(chat-to-player-using-id this-any-human-enemy 2303); "You have made a wise choice -- together we shall rule the world." | |
(enable-timer tribute-timer2 10) | |
(set-stance this-any-human-enemy ally)) | |
(defrule | |
(players-tribute-memory any-human-neutral wood >= 200) | |
(players-tribute-memory any-human-neutral food >= 200) | |
(players-tribute-memory any-human-neutral gold >= 200) | |
(players-tribute-memory any-human-neutral stone >= 200) | |
(goal request 1) | |
=> | |
(clear-tribute-memory this-any-human-neutral wood) | |
(clear-tribute-memory this-any-human-neutral food) | |
(clear-tribute-memory this-any-human-neutral gold) | |
(clear-tribute-memory this-any-human-neutral stone) | |
(chat-to-player-using-id this-any-human-neutral 22002);"I am grateful for thy tribute." | |
(chat-to-player-using-id this-any-human-neutral 22003);"Let us be friends henceforth!" | |
(set-stance this-any-human-neutral ally) | |
(set-goal request 0)) | |
(defrule | |
(players-tribute-memory any-human-enemy wood >= 500) | |
(players-tribute-memory any-human-enemy food >= 500) | |
(players-tribute-memory any-human-enemy gold >= 500) | |
(players-tribute-memory any-human-enemy stone >= 500) | |
(goal request 1) | |
=> | |
(clear-tribute-memory this-any-human-enemy wood) | |
(clear-tribute-memory this-any-human-enemy food) | |
(clear-tribute-memory this-any-human-enemy gold) | |
(clear-tribute-memory this-any-human-enemy stone) | |
(chat-to-player-using-id this-any-human-enemy 2303); "You have made a wise choice -- together we shall rule the world." | |
(set-stance this-any-human-enemy ally) | |
(set-goal request 0)) | |
(defrule | |
(timer-triggered stance) | |
(goal stanceg 1) | |
(players-stance any-human-neutral ally) | |
=> | |
(chat-to-player-using-id this-any-human-neutral 2302); "It was wise to do as I requested." | |
(set-stance this-any-human-neutral ally) | |
(disable-timer stance) | |
(set-goal stanceg 0)) | |
(defrule | |
(timer-triggered stance) | |
(goal stanceg 1) | |
(or (players-stance any-human-neutral neutral) | |
(players-stance any-human-neutral enemy)) | |
=> | |
(chat-to-player-using-id this-any-human-neutral 2305); "You dare defy me?! Prepare to die!" | |
(set-stance this-any-human-neutral enemy) | |
(disable-timer stance) | |
(set-goal stanceg 0)) | |
#end-if | |
#end-if | |
#load-if-defined UP-ALLY-IN-GAME | |
(defrule ; large amounts of res required so that it doesn't chat every 60 seconds | |
(or (players-tribute-memory any-human-ally wood >= 5001) | |
(or (players-tribute-memory any-human-ally food >= 5001) | |
(or (players-tribute-memory any-human-ally gold >= 5001) | |
(players-tribute-memory any-human-ally stone >= 1501)))) | |
=> | |
(chat-to-player-using-id this-any-human-ally 22114); "Thanks! It will be wisely spent." | |
(clear-tribute-memory this-any-human-ally wood) | |
(clear-tribute-memory this-any-human-ally food) | |
(clear-tribute-memory this-any-human-ally gold) | |
(clear-tribute-memory this-any-human-ally stone)) | |
(defrule | |
(taunt-detected any-ally 42) | |
(current-age == dark-age) | |
=> | |
(chat-to-player-using-id this-any-ally 22165) | |
(acknowledge-taunt this-any-ally 42) | |
) | |
(defrule | |
(taunt-detected any-ally 42) | |
(current-age == feudal-age) | |
=> | |
(chat-to-player-using-id this-any-ally 22166) | |
(acknowledge-taunt this-any-ally 42) | |
) | |
(defrule | |
(taunt-detected any-ally 42) | |
(current-age == castle-age) | |
=> | |
(chat-to-player-using-id this-any-ally 22167) | |
(acknowledge-taunt this-any-ally 42) | |
) | |
(defrule | |
(taunt-detected any-ally 42) | |
(current-age == imperial-age) | |
=> | |
(chat-to-player-using-id this-any-ally 22168) | |
(acknowledge-taunt this-any-ally 42) | |
) | |
#end-if | |
(defrule | |
(taunt-detected any-human-enemy 250) | |
=> | |
(chat-to-player this-any-human-enemy "The official HD AI - created by Archon and Promiskuitiv.") | |
(acknowledge-taunt this-any-human-enemy 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
=> | |
(chat-to-player this-any-computer "The official HD AI - created by Archon and Promiskuitiv.") | |
(chat-to-player this-any-human "The official HD AI - created by Archon and Promiskuitiv.")) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal strategy-goal sling) | |
=> | |
(chat-to-player this-any-computer "I am slinging.") | |
(chat-to-player this-any-human-ally "I am slinging.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal control-goal shot) | |
=> | |
(chat-to-player this-any-computer "I am the shot.") | |
(chat-to-player this-any-human-ally "I am the shot.")) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal strategy-goal rush) | |
=> | |
(chat-to-player this-any-computer "I'm going for a fast castle age.") | |
(chat-to-player this-any-human-ally "I'm going for a fast castle age.")) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal strategy-goal flush) | |
=> | |
(chat-to-player this-any-computer "I'm going train an army in the feudal age.") | |
(chat-to-player this-any-human-ally "I'm going train an army in the feudal age.")) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal strategy-goal fast-imp) | |
=> | |
(chat-to-player this-any-computer "I'm going for a fast imperial age.") | |
(chat-to-player this-any-human-ally "I'm going for a fast imperial age.")) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal strategy-goal boom) | |
=> | |
(chat-to-player this-any-computer "I will boom.") | |
(chat-to-player this-any-human-ally "I will boom.")) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal unit-goal monk) | |
=> | |
(chat-to-player this-any-computer "I'll focus on monks.") | |
(chat-to-player this-any-human-ally "I'll focus on monks.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal unit-goal eagle-warrior) | |
=> | |
(chat-to-player this-any-computer "I'll focus on eagle warriors.") | |
(chat-to-player this-any-human-ally "I'll focus on eagle warriors.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(or (civ-selected byzantine) | |
(civ-selected indian)) | |
(goal unit-goal knight) | |
=> | |
(chat-to-player this-any-computer "I'll focus on camels.") | |
(chat-to-player this-any-human-ally "I'll focus on camels.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal unit-goal knight) | |
=> | |
(chat-to-player this-any-computer "I'll focus on knights.") | |
(chat-to-player this-any-human-ally "I'll focus on knights.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal unit-goal archer) | |
=> | |
(chat-to-player this-any-computer "I'll focus on archers.") | |
(chat-to-player this-any-human-ally "I'll focus on archers.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal unit-goal cavalry-archer) | |
=> | |
(chat-to-player this-any-computer "I'll focus on cavalry archers.") | |
(chat-to-player this-any-human-ally "I'll focus on cavalry archers.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal unit-goal skirmisher) | |
=> | |
(chat-to-player this-any-computer "I'll focus on trash units.") | |
(chat-to-player this-any-human-ally "I'll focus on trash units.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal unit-goal militiaman-line) | |
=> | |
(chat-to-player this-any-computer "I'll focus on infantry.") | |
(chat-to-player this-any-human-ally "I'll focus on infantry.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal unit-goal my-unique-unit-line) | |
=> | |
(chat-to-player this-any-computer "I'll focus on unique units.") | |
(chat-to-player this-any-human-ally "I'll focus on unique units.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal unit-goal scout-cavalry) | |
=> | |
(chat-to-player this-any-computer "I'll focus on scouts.") | |
(chat-to-player this-any-human-ally "I'll focus on scouts.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal unit-goal gunpowder-class) | |
=> | |
(chat-to-player this-any-computer "I'll focus on guns.") | |
(chat-to-player this-any-human-ally "I'll focus on guns.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
(goal unit-goal scorpion) | |
=> | |
(chat-to-player this-any-computer "I'll focus scorpions.") | |
(chat-to-player this-any-human-ally "I'll focus scorpions.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(or (taunt-detected any-computer 250) | |
(taunt-detected any-human 250)) | |
=> | |
(chat-to-player this-any-computer "I'm not focussing on any particular unit.") | |
(chat-to-player this-any-human-ally "I'm not focussing on any particular unit.") | |
(acknowledge-taunt any-computer 250) | |
(acknowledge-taunt any-human-ally 250)) | |
(defrule | |
(taunt-detected any-human 250) | |
=> | |
(acknowledge-taunt any-human 250)) | |
#load-if-defined DARK-AGE-START | |
(defrule | |
(players-current-age focus-player == dark-age) | |
(players-military-population focus-player > 1) | |
(game-time < 720) | |
(unit-type-count-total militiaman-line < 4) | |
(military-population < 5); no weird scenario | |
(can-train militiaman-line) | |
=> | |
(train militiaman-line) | |
) | |
#end-if | |
#load-if-defined UP-SCENARIO-GAME | |
(defrule | |
(true) | |
=> | |
(chat-to-player my-player-number "100") | |
(disable-self)) | |
#end-if | |
(defrule | |
(or (taunt-detected any-human 101) | |
(taunt-detected my-player-number 101)) | |
=> | |
(acknowledge-taunt every-human 100) | |
(acknowledge-taunt my-player-number 100) | |
(acknowledge-taunt every-human 101) | |
(acknowledge-taunt my-player-number 101)) | |
(defrule | |
(or (taunt-detected any-human 100) | |
(taunt-detected my-player-number 100)) | |
=> | |
(up-jump-rule 11)) | |
(defrule | |
(or (and (population >= max-civ) | |
(population >= 4)) | |
(or (military-population >= 25); test | |
(or (up-timer-status resign-timer >= timer-running) | |
(or (game-time < 600) | |
(or (hold-relics) | |
(or (building-type-count wonder >= 1) | |
(players-building-type-count any-ally wonder >= 1))))))) | |
=> | |
(up-jump-rule 10)) | |
(defrule | |
(or (player-in-game any-human-enemy) | |
(not (player-in-game any-human-ally))) | |
(strategic-number sn-military-level <= -1); -3 | |
(population < 50) | |
(nand (player-in-game any-ally) | |
(players-population any-ally >= 75)) | |
(players-population any-enemy >= 175) | |
=> | |
(enable-timer resign-timer 4) | |
(disable-self)) | |
(defrule | |
(strategic-number sn-military-level <= -1); -3 | |
(or (nand (player-in-game any-ally) | |
(players-population any-ally >= 75)) | |
(not (player-in-game any-ally))) | |
(unit-type-count-total villager < 1) | |
(unit-type-count-total monk < 1) | |
(building-type-count town-center < 1) | |
(building-type-count monastery < 1) | |
=> | |
(enable-timer resign-timer 4) | |
(disable-self)) | |
(defrule | |
(or (player-in-game any-human-enemy) | |
(and (population <= 1); scout | |
(housing-headroom <= 0))) | |
(unit-type-count-total villager < 1) | |
(unit-type-count-total monk < 1) | |
(building-type-count market < 1) | |
(building-type-count dock < 1) | |
(building-type-count town-center < 1) | |
(building-type-count monastery < 1) | |
=> | |
(enable-timer resign-timer 4) | |
(disable-self)) | |
(defrule | |
; (player-in-game any-human-enemy) | |
(strategic-number sn-military-level <= -1); -3 | |
(or (nand (player-in-game any-ally) | |
(players-population any-ally >= 60)) | |
(not (player-in-game any-ally))) | |
; (building-type-count town-center < 1) | |
(population < 5) | |
(players-population any-enemy >= 60) | |
;(not (player-in-game every-ally)) | |
=> | |
(enable-timer resign-timer 4) | |
(disable-self)) | |
(defrule | |
; (player-in-game any-human-enemy) | |
(strategic-number sn-military-level <= -1); -3 | |
(or (nand (player-in-game any-ally) | |
(players-population any-ally >= 75)) | |
(not (player-in-game any-ally))) | |
; (building-type-count town-center < 1) | |
(population < 10) | |
(players-population any-enemy >= 90) | |
;(not (player-in-game every-ally)) | |
=> | |
(enable-timer resign-timer 4) | |
(disable-self)) | |
(defrule | |
; (player-in-game any-human-enemy) | |
(strategic-number sn-military-level <= -1); -3 | |
(or (nand (player-in-game any-ally) | |
(players-population any-ally >= 75)) | |
(not (player-in-game any-ally))) | |
; (building-type-count town-center < 1) | |
(population < 22) | |
(players-population any-enemy >= 120) | |
;(not (player-in-game every-ally)) | |
=> | |
(enable-timer resign-timer 4) | |
(disable-self)) | |
(defrule | |
(player-in-game any-human-enemy) | |
(strategic-number sn-military-level <= -1); -3 | |
(or (nand (player-in-game any-ally) | |
(players-population any-ally >= 75)) | |
(not (player-in-game any-ally))) | |
; (building-type-count town-center < 1) | |
(population < 35); potentially more in the rule below | |
(players-population any-enemy >= 150) | |
;(not (player-in-game every-ally)) | |
=> | |
(enable-timer resign-timer 4) | |
(disable-self)) | |
(defrule | |
(player-in-game any-human-enemy) | |
(strategic-number sn-military-level <= -1); -3 | |
(or (nand (player-in-game any-ally) | |
(players-population any-ally >= fourty-percent-pop)) | |
(not (player-in-game any-ally))) | |
; (building-type-count town-center < 1) | |
(population < 60) | |
(population < twenty-five-percent-pop) | |
(players-population any-enemy > eighty-five-percent-pop) | |
;(not (player-in-game every-ally)) | |
=> | |
(enable-timer resign-timer 4) | |
(disable-self)) | |
(defrule | |
(or (population >= max-civ) | |
(or (player-in-game any-human-ally) | |
(player-in-game every-ally))); also got other resign rules | |
=> | |
(up-jump-rule 1)) | |
(defrule | |
(player-in-game any-human-enemy) | |
; (goal Multiplayer yes) | |
(strategic-number sn-military-level <= -1); -3 | |
(or (nand (player-in-game any-ally) | |
(players-population any-ally >= 80)) | |
(not (player-in-game any-ally))) | |
(population < 60) | |
(or (population < 50) | |
(player-resigned any-ally)) | |
(players-population any-enemy >= 175) | |
; j(not (player-in-game every-ally)) | |
=> | |
(enable-timer resign-timer 4) | |
(disable-self)) | |
(defrule | |
(up-timer-status resign-timer >= timer-running) | |
=> | |
(chat-to-all-using-range 22300 22) | |
(chat-to-all-using-id 22322) | |
(disable-self)) | |
(defrule | |
(timer-triggered resign-timer) | |
(player-in-game any-ally) | |
=> | |
(tribute-to-player this-any-ally wood 99999) | |
(tribute-to-player this-any-ally food 99999) | |
(tribute-to-player this-any-ally gold 99999) | |
(tribute-to-player this-any-ally stone 99999) | |
(resign)) | |
(defrule | |
(timer-triggered resign-timer) | |
(not (player-in-game any-ally)) | |
=> | |
(resign)) | |
#load-if-not-defined DIFFICULTY-HARDEST | |
#load-if-not-defined DIFFICULTY-HARD | |
#load-if-not-defined DIFFICULTY-MODERATE | |
(defrule | |
(up-timer-status resign-timer >= timer-running) | |
(or (building-type-count watch-tower >= 1) | |
(or (building-type-count guard-tower >= 1) | |
(or (building-type-count keep >= 1) | |
(or (building-type-count bombard-tower >= 1) | |
(building-type-count castle >= 1))))) | |
=> | |
(delete-building watch-tower) | |
(delete-building guard-tower) | |
(delete-building keep) | |
(delete-building bombard-tower) | |
(delete-building castle)) | |
#end-if | |
#end-if | |
#end-if | |
(defrule | |
(timer-triggered tensec) | |
=> | |
(disable-timer tensec) | |
(enable-timer tensec 10)) | |
(defrule | |
(timer-triggered thirty) | |
=> | |
(disable-timer thirty) | |
(enable-timer thirty 30)) | |
(defrule | |
(timer-triggered two-minute-timer) | |
=> | |
(disable-timer two-minute-timer) | |
(enable-timer two-minute-timer 120)) | |
(defrule | |
(timer-triggered one-minute-timer) | |
=> | |
(disable-timer one-minute-timer) | |
(set-strategic-number sn-food-modifier-percentage 0) | |
(set-strategic-number sn-wood-modifier-percentage 0) | |
(set-strategic-number sn-gold-modifier-percentage 0) | |
(set-strategic-number sn-stone-modifier-percentage 0) | |
(enable-timer one-minute-timer 60)) | |
(defrule | |
(taunt-detected any-computer 247) | |
=> | |
(up-chat-data-to-all "Food%: %d %" s: sn-food-gatherer-percentage) | |
(up-chat-data-to-all "Wood%: %d %" s: sn-wood-gatherer-percentage) | |
(up-chat-data-to-all "Gold%: %d %" s: sn-gold-gatherer-percentage) | |
(up-chat-data-to-all "Stone%: %d %" s: sn-stone-gatherer-percentage) | |
(acknowledge-taunt this-any-computer 247) | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment