Code:
; Computer Player (so-called AI) configuration file
; file version 0.50k, by Tomasz Lis
; Modify only if you know what you're doing!
; Don't change the [common] block!
[common]
ComputerAssists = 6 7 8 9
ProcessesCount = 25
ChecksCount = 51
EventsCount = 31
ComputersCount = 13
; Processes, Checks and Events are used to define behaviour of computer players.
; These are defined in [processX], [checkX] and [eventX] blocks, and can be added
; to computer player ([computerX] block) by typing their mnemonic.
; All mnemonics should be unique. Note that length of mnemonic can't exceed 15 characters.
; Process names don't have to be unique and are limited to 160 characters.
; Computers are numbered starting from 0, while other elements - from 1.
;---------------------------------------------------------------;
;-------------------------- Processes --------------------------;
;---------------------------------------------------------------;
; Definition of processes - their mnemonics will be later used to add them to computer players
[process1]
Name = BUILD ALL ROOM 3x3
Mnemonic = RoomAll3
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 3 3 0 -1
Functions = check_build_all_rooms setup_any_room_continue process_task completed_build_a_room paused_task
Params = 0 0 0 0 0 0
; <priority> - priority of the process; this parameter controls which process to choose if more than one process has met the conditions to be conducted
; <room_width> - number of tiles width the room should have
; <room_height> - number of tiles height the room should have; this value should not differ from room_width by more than 1, if it does then a room with non-rectangular shape can result
; <room_kind> - the room kind to be built
; <room_link> - the room kind which we'd prefer to build a connection from; if not available then build anywhere
; Priority order for determining room placement, first to last:
; 1. next to the <room_link> room, within diggable earth and not on claimed tiles
; 2. next to a random room, within diggable earth and not on claimed tiles
; 3. next to the <room_link> room, on claimed tiles
; 4. next to a random room, on claimed tiles
; 5. room is not placed
; Keep in mind "random room" includes the Dungeon Heart and Entrance; placement space must not be blocked by other rooms, impenetrable rock, gems, lava
[process2]
Name = BUILD ALL ROOM 4x4
Mnemonic = RoomAll4
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 4 4 0 -1
Functions = check_build_all_rooms setup_any_room_continue process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process3]
Name = BUILD A PRISON ROOM
Mnemonic = RoomPrisn
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 3 4 4 14
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process4]
Name = BUILD A TORTURE ROOM
Mnemonic = RoomTortr
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 3 4 5 4
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process5]
Name = BUILD A SCAVENGER ROOM
Mnemonic = RoomScavn
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 3 3 9 4
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process6]
Name = BUILD A TEMPLE ROOM
Mnemonic = RoomTempl
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 3 3 10 8
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process7]
Name = BUILD A GRAVEYARD ROOM
Mnemonic = RoomGrave
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 4 5 11 5
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process8]
Name = BUILD A BARRACK ROOM
Mnemonic = RoomBarrc
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 3 4 12 6
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process9]
Name = BUILD A TREASURE ROOM
Mnemonic = RoomTresr
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 10 5 5 2 7
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process10]
Name = BUILD A RESEARCH ROOM
Mnemonic = RoomRsrch
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 5 5 3 2
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process11]
Name = BUILD A HATCHERY
Mnemonic = RoomHatch
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 6 5 13 14
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process12]
Name = BUILD A LAIR ROOM
Mnemonic = RoomLair
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 5 5 14 7
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
; Minimum allowable size of lair is dependent on MAX_CREATURES
[process13]
Name = BUILD A TRAINING ROOM
Mnemonic = RoomTrain
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 5 6 6 14
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process14]
Name = BUILD A WORKSHOP ROOM
Mnemonic = RoomWrksh
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 6 6 8 3
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process15]
Name = DIG TO AN ENTRANCE
Mnemonic = DigEntrn
; Values = <#> <game_turns_interval> <#> <#> <#>
Values = 0 1700 0 0 0
Functions = check_dig_to_entrance setup_dig_to_entrance process_task completed_task paused_task
Params = 0 0 0 0 0 0
; <game_turns_interval> - game turns before begin digging, but also divides the turns by the amount of entrances on the map (2 entrances = half the turns)
; When the interval occurs, digging to an entrance is only executed when either of these conditions apply to AI:
; 1. Entrance count is less than a third of [neutral entrances + own entrances]
; 2. An opponent has more portals
; Upon execution will dig to the nearest portal; which can include digging to a closer enemy portal but only if there's a gap in their fortification (neither Attck1 nor EnEntrn1 required for this)
[process16]
Name = DIG TO GOLD
Mnemonic = DigGold
; Values = <priority> <money_below> <distance_inc_turns> <slabs_at_once> <initial_distance>
Values = 0 10999 150 7 0
Functions = check_dig_to_gold setup_dig_to_gold process_task completed_task paused_task
Params = 0 0 0 0 0 0
; <priority> - priority of the process, it is increased automatically every time computer player lacks money
; <money_below> - gold amount; the process is started only if prediction of gold left after next payday falls below it
; <distance_inc_turns> - max digging distance increases with length of the gameplay; every given gameturns amount it expands one subtile
; <slabs_at_once> - amount of slabs marked for diggind during one run of the process
; <initial_distance> - initial max distance at which digging is allowed, in subtiles; it is increased every few gameturns
; Process of tunnelling to gold/gem slabs and marking them for digging
; AI will only execute dig process when it has a treasure room
[process17]
Name = BUILD A TREASURE ROOM 4x4
Mnemonic = RoomTres4
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 10 4 4 2 7
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process18]
Name = BUILD A LAIR ROOM 4x4
Mnemonic = RoomLair4
; Values = <priority> <room_width> <room_height> <room_kind> <room_link>
Values = 0 4 4 14 7
Functions = check_any_room setup_any_room process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process19]
Name = DIG TO CLOSE GOLD
Mnemonic = DigClGold
; Values = <priority> <money_below> <distance_inc_turns> <slabs_at_once> <initial_distance>
Values = 0 30999 500 5 71
Functions = check_dig_to_gold setup_dig_to_gold process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process20]
Name = DIG TO GREEDY GOLD
Mnemonic = DigGrGold
; Values = <priority> <money_below> <distance_inc_turns> <slabs_at_once> <initial_distance>
Values = 0 40999 400 7 900
Functions = check_dig_to_gold setup_dig_to_gold process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process21]
Name = DIG TO GREEDY GOLD2
Mnemonic = DigGrGld2
; Values = <priority> <money_below> <distance_inc_turns> <slabs_at_once> <initial_distance>
Values = 0 40999 50 7 900
Functions = check_dig_to_gold setup_dig_to_gold process_task completed_task paused_task
Params = 0 0 0 0 0 0
[process22]
Name = SIGHT OF EVIL
Mnemonic = SplSOE
; Values = <priority> <#> <#> <game_turns_interval> <#>
Values = 0 8 64 1500 0
Functions = check_sight_of_evil setup_sight_of_evil process_sight_of_evil completed_task paused_task
Params = 0 0 0 0 0 0
[process23]
Name = SIGHT OF EVIL SCARE
Mnemonic = SOEScare
; Values = <priority> <#> <#> <game_turns_interval> <#>
Values = 0 8 10 5000 0
Functions = check_sight_of_evil setup_sight_of_evil process_sight_of_evil completed_task paused_task
Params = 0 0 0 0 0 0
[process24]
Name = ATTACK PLAN 1
Mnemonic = Attck1
; Values = <priority> <percent_creatures> <creatures_required> <percent_attracted_requirement> <#>
Values = 0 55 6 80 0
Functions = check_attack1 setup_attack1 process_task completed_attack1 paused_task
Params = 0 0 0 0 0 0
; <priority>
; <percent_creatures> - percentage of AI's available creatures that will now be compared against <creatures_required>; "available" means not knocked out, etc.
; <creatures_required> - compare this amount of required creatures against the amount of creatures defined with <percent_creatures>
; <percent_attracted_requirement> - AI's attracted creatures percentage must be higher than this percent; attracted creatures percentage is defined by [active creatures out of MAX_CREATURES]
; <#> - unused?
; Requires EnEntrn1 Check, will not execute until after EnEntrn1; will not execute if Attck1 is already currently running.
; Process only executes when its multiple conditions meet their requirements.
[process25]
Name = ATTACK SAFE ATTACK
Mnemonic = AttckSafe
; Values = <priority> <percent_creatures> <creatures_required> <percent_attracted_requirement> <#>
Values = 0 25 4 80 0
Functions = check_safe_attack setup_attack1 process_task completed_attack1 paused_task
Params = 0 0 0 0 0 0
; Same as Attck1 except it has an extra requirement for the second value
; <percent_creatures> - only executes attack when [target enemy creature count increased by <percent_creatures>%] is less than AI's current creature count
;---------------------------------------------------------------;
;--------------------------- Checks ----------------------------;
;---------------------------------------------------------------;
; Definition of checks - their mnemonics will be later used to add them to computer players
[check1]
Name = CHECK MONEY
Mnemonic = Money1
; Values = <#> <game_turns_interval>
Values = 0 100
Functions = check_for_money
; Params = <low_gold> <critical_gold> <#> <#>
Params = 500 -1000 0 0
; Function which reacts for player having low money, by increasing priority of gold digging, and creating processes of selling traps and doors, moving creatures with expensive jobs to lair and moving unowned gold to treasury
; Low gold and critical gold value; if after next payday, the planned amount of gold left is low, then actions are taken to get more gold; if remaining value is lower than critical, aggressive actions are taken
[check2]
Name = CHECK EXPAND ROOM
Mnemonic = RoomExp1
; Values = <#> <game_turns_interval>
Values = 0 301
Functions = check_for_expand_room
Params = 0 0 0 0
; RoomExp1-6 increases the size of existing rooms, does not create separate rooms
[check3]
Name = CHECK EXPAND ROOM
Mnemonic = RoomExp2
; Values = <#> <game_turns_interval>
Values = 0 200
Functions = check_for_expand_room
Params = 0 0 0 0
[check4]
Name = CHECK EXPAND ROOM
Mnemonic = RoomExp3
; Values = <#> <game_turns_interval>
Values = 0 101010
Functions = check_for_expand_room
Params = 0 0 0 0
[check5]
Name = CHECK EXPAND ROOM
Mnemonic = RoomExp4
; Values = <#> <game_turns_interval>
Values = 0 210
Functions = check_for_expand_room
Params = 0 0 0 0
[check6]
Name = CHECK EXPAND ROOM
Mnemonic = RoomExp5
; Values = <#> <game_turns_interval>
Values = 0 201
Functions = check_for_expand_room
Params = 0 0 0 0
[check7]
Name = CHECK EXPAND ROOM
Mnemonic = RoomExp6
; Values = <#> <game_turns_interval>
Values = 0 10
Functions = check_for_expand_room
Params = 0 0 0 0
[check8]
Name = CHECK AVAILIABLE TRAP
Mnemonic = TrapAvl1
; Values = <#> <game_turns_interval>
Values = 0 430
Functions = check_for_place_trap
Params = 0 0 0 0
[check9]
Name = CHECK AVAILIABLE TRAP
Mnemonic = TrapAvl2
; Values = <#> <game_turns_interval>
Values = 0 330
Functions = check_for_place_trap
Params = 0 0 0 0
[check10]
Name = CHECK FOR NEUTRAL PLACES
Mnemonic = NeutPlc1
; Values = <#> <game_turns_interval>
Values = 0 5580
Functions = check_neutral_places
Params = 0 0 0 15000
[check11]
Name = CHECK FOR NEUTRAL PLACES
Mnemonic = NeutPlc2
; Values = <#> <game_turns_interval>
Values = 0 1780
Functions = check_neutral_places
Params = 0 0 0 15000
[check12]
Name = CHECK FOR NEUTRAL PLACES
Mnemonic = NeutPlc3
; Values = <#> <game_turns_interval>
Values = 0 1780
Functions = check_neutral_places
Params = 0 0 0 20000
[check13]
Name = CHECK FOR NEUTRAL PLACES
Mnemonic = NeutPlc4
; Values = <#> <game_turns_interval>
Values = 0 780
Functions = check_neutral_places
Params = 0 0 0 0
[check14]
Name = CHECK FOR NEUTRAL PLACES
Mnemonic = NeutPlc5
; Values = <#> <game_turns_interval>
Values = 0 780
Functions = check_neutral_places
Params = 0 0 0 5000
[check15]
Name = CHECK FOR NEUTRAL PLACES
Mnemonic = NeutPlc6
; Values = <#> <game_turns_interval>
Values = 0 5580
Functions = check_neutral_places
Params = 0 0 0 25000
[check16]
Name = CHECK FOR NEUTRAL PLACES
Mnemonic = NeutPlc7
; Values = <#> <game_turns_interval>
Values = 0 5580
Functions = check_neutral_places
Params = 0 0 0 0
[check17]
Name = CHECK AVAILIABLE DOOR
Mnemonic = DoorAvl
; Values = <#> <game_turns_interval>
Values = 0 330
Functions = check_for_place_door
Params = 0 0 0 0
[check18]
Name = CHECK FOR ENEMY ENTRANCES
Mnemonic = EnEntrn1
; Values = <#> <game_turns_interval>
Values = 0 290
Functions = check_enemy_entrances
Params = 0 0 0 0
; Returns position of entrance belonging to most hated enemy
; Opponent must have an entrance in order to be targeted
[check19]
Name = CHECK FOR ENEMY ENTRANCES
Mnemonic = EnEntrn2
; Values = <#> <game_turns_interval>
Values = 0 690
Functions = check_enemy_entrances
Params = 0 0 0 0
[check20]
Name = CHECK FOR SLAP IMP
Mnemonic = ImpSlap1
; Values = <#> <game_turns_interval>
Values = 0 250
Functions = check_slap_imps
Params = 75 0 0 -250
[check21]
Name = CHECK FOR SLAP IMP
Mnemonic = ImpSlap2
; Values = <#> <game_turns_interval>
Values = 0 250
Functions = check_slap_imps
Params = 95 0 0 0
[check22]
Name = CHECK FOR SLAP IMP
Mnemonic = ImpSlap3
; Values = <#> <game_turns_interval>
Values = 0 21
Functions = check_slap_imps
Params = 100 0 0 -250
[check23]
Name = CHECK FOR SPEED UP
Mnemonic = SplSpdu1
; Values = <#> <game_turns_interval>
Values = 0 200
Functions = check_for_accelerate
Params = 0 0 0 0
[check24]
Name = CHECK FOR SPEED UP
Mnemonic = SplSpdu2
; Values = <#> <game_turns_interval>
Values = 0 19
Functions = check_for_accelerate
Params = 0 0 0 0
[check25]
Name = CHECK FOR QUICK ATTACK
Mnemonic = AtckQck1
; Values = <#> <game_turns_interval>
Values = 0 690
Functions = check_for_quick_attack
Params = 90 3000 7 9500
[check26]
Name = CHECK FOR QUICK ATTACK
Mnemonic = AtckQck2
; Values = <#> <game_turns_interval>
Values = 0 390
Functions = check_for_quick_attack
Params = 60 1 0 0
[check27]
Name = CHECK FOR QUICK ATTACK
Mnemonic = AtckQck3
; Values = <#> <game_turns_interval>
Values = 0 390
Functions = check_for_quick_attack
Params = 90 1 14 112000
[check28]
Name = CHECK FOR QUICK ATTACK
Mnemonic = AtckQck4
; Values = <#> <game_turns_interval>
Values = 0 390
Functions = check_for_quick_attack
Params = 90 0 24 3000
[check29]
Name = CHECK FOR QUICK ATTACK
Mnemonic = AtckQck5
; Values = <#> <game_turns_interval>
Values = 0 390
Functions = check_for_quick_attack
Params = 90 0 14 24000
[check30]
Name = CHECK FOR QUICK ATTACK
Mnemonic = AtckQck6
; Values = <#> <game_turns_interval>
Values = 0 390
Functions = check_for_quick_attack
Params = 90 0 14 14000
[check31]
Name = CHECK TO PRETTY
Mnemonic = DnPrtty1
; Values = <#> <game_turns_interval>
Values = 0 405
Functions = check_for_pretty
Params = 7 0 0 0
[check32]
Name = CHECK TO PRETTY
Mnemonic = DnPrtty2
; Values = <#> <game_turns_interval>
Values = 0 400
Functions = check_for_pretty
Params = 7 0 0 0
[check33]
Name = CHECK FOR ENOUGH IMPS
Mnemonic = ImpEngh1
; Values = <flags?> <game_turns_interval>
Values = 0 203
Functions = check_no_imps
; Params = <maximum_imps> <minimum_imps> <extra_imps> <imp_creation>
Params = 16 9 3 0
; Flags and game turns interval between checks
; Function which uses create imp spell if player has not enough imps
; <maximum_imps> - if AI has below maximum imps and spare money then he will use digger creation spell.
; <minimum_imps> - if AI has below minimum imps then he will use digger creation spell.
; <extra_imps> - for each gem face marked for digging increase both minimum and maximum by <extra_imps>.
; <imp_creation> - if set to 0: when check is executed spam create imps until either it reaches maximum or does not have spare money. If set to 1: create only 1 imp each time check is executed.
[check34]
Name = CHECK FOR ENOUGH IMPS
Mnemonic = ImpEngh2
; Values = <#> <game_turns_interval>
Values = 0 200
Functions = check_no_imps
Params = 11 5 1 0
[check35]
Name = CHECK FOR ENOUGH IMPS
Mnemonic = ImpEngh3
; Values = <#> <game_turns_interval>
Values = 0 200
Functions = check_no_imps
Params = 14 12 2 0
[check36]
Name = CHECK FOR ENOUGH IMPS
Mnemonic = ImpEngh4
; Values = <#> <game_turns_interval>
Values = 0 200
Functions = check_no_imps
Params = 3 3 0 0
[check37]
Name = CHECK FOR ENOUGH IMPS
Mnemonic = ImpEngh5
; Values = <#> <game_turns_interval>
Values = 0 200
Functions = check_no_imps
Params = 13 5 2 0
[check38]
Name = CHECK FOR ENOUGH IMPS
Mnemonic = ImpEngh6
; Values = <#> <game_turns_interval>
Values = 0 200
Functions = check_no_imps
Params = 13 2 0 0
[check39]
Name = CHECK FOR ENOUGH IMPS
Mnemonic = ImpEngh7
; Values = <#> <game_turns_interval>
Values = 0 203
Functions = check_no_imps
Params = 13 9 3 0
[check40]
Name = CHECK FOR ENOUGH IMPS
Mnemonic = ImpEngh8
; Values = <#> <game_turns_interval>
Values = 0 20
Functions = check_no_imps
Params = 99 9 0 0
[check41]
Name = MOVE CREATURE TO TRAINING
Mnemonic = MvTrain1
; Values = <#> <game_turns_interval>
Values = 0 400
Functions = check_move_to_room
Params = 95 6 0 7000
[check42]
Name = MOVE CREATURE TO BEST ROOM
Mnemonic = MvBest1
; Values = <#> <game_turns_interval>
Values = 0 270
Functions = check_move_to_best_room
Params = 75 0 0 0
[check43]
Name = MOVE CREATURE TO BEST ROOM
Mnemonic = MvBest2
; Values = <#> <game_turns_interval>
Values = 0 270
Functions = check_move_to_best_room
Params = 70 0 0 0
[check44]
Name = COMPUTER CHECK HATES
Mnemonic = Hates1
; Values = <#> <game_turns_interval>
Values = 0 400
Functions = checks_hates
Params = 8000 0 0 1600
[check45]
Name = COMPUTER CHECK HATES
Mnemonic = Hates2
; Values = <#> <game_turns_interval>
Values = 0 500
Functions = checks_hates
Params = 4000 0 0 0
[check46]
Name = COMPUTER CHECK HATES
Mnemonic = Hates3
; Values = <#> <game_turns_interval>
Values = 0 500
Functions = checks_hates
Params = 40000 0 0 2000
[check47]
Name = COMPUTER CHECK HATES
Mnemonic = Hates4
; Values = <#> <game_turns_interval>
Values = 0 400
Functions = checks_hates
Params = 4000 0 0 2000
[check48]
Name = UNUSED
[check49]
Name = UNUSED
[check50]
Name = UNUSED
[check51]
Name = UNUSED
;---------------------------------------------------------------;
;--------------------------- Events ----------------------------;
;---------------------------------------------------------------;
; Definition of events - their mnemonics will be later used to add them to computer players
; Note that some events have processes attached
[event1]
Name = EVENT DUNGEON BREACH
Mnemonic = DnBreach
; Values = <#> <#> <game_turns_cooldown?>
Values = 0 4 295
Functions = event_battle none
Params = 75 1 0 0
[event2]
Name = EVENT ROOM ATTACK
Mnemonic = AttkRom1
; Values = <#> <#> <game_turns_cooldown?>
Values = 0 19 295
Functions = event_battle none
Params = 75 1 0 0
[event3]
Name = EVENT ROOM ATTACK
Mnemonic = AttkRom2
; Values = <#> <#> <game_turns_cooldown?>
Values = 0 19 295
Functions = event_battle none
Params = 75 3 0 0
[event4]
Name = EVENT HEART UNDER ATTACK
Mnemonic = AttkHrt1
; Values = <#> <#> <game_turns_cooldown>
Values = 0 1 295
Functions = event_battle none
Params = 99 3 0 0
[event5]
Name = EVENT TREASURE ROOM FULL
Mnemonic = RomFTrsr
; Values = <#> <#> <game_turns_cooldown>
Values = 0 11 1195
Functions = event_find_link none
Process = RoomTresr
Params = 0 0 0 0
; Builds a new Treasury if all Treasuries are at full capacity
; Does not build replacement Treasury when the last one is claimed/destroyed because it doesn't get a chance to reach full capacity
; Requires process RoomTresr/RoomAll3/RoomAll4 (no link with RoomTres4)
[event6]
Name = EVENT LIVING SPACE FULL
Mnemonic = RomFLair
; Values = <#> <#> <game_turns_cooldown>
Values = 0 17 1195
Functions = event_find_link none
Process = RoomLair
Params = 0 0 0 0
; Builds a new Lair if creatures have no home; room full capacity not required as calculation is done sooner
; A replacement Lair WILL be built when the last Lair is claimed/destroyed
; Requires process RoomLair/RoomAll3/RoomAll4 (no link with RoomLair4)
[event7]
Name = EVENT FIGHT
Mnemonic = Fight1
; Values = <#> <#> <#>
Values = 0 2 -2
Functions = event_battle none
Params = 75 1 0 0
[event8]
Name = EVENT FIGHT
Mnemonic = Fight2
; Values = <#> <#> <#>
Values = 0 2 -2
Functions = event_battle none
Params = 25 1 0 0
[event9]
Name = EVENT FIGHT TEST
Mnemonic = FghTest
; Values = <#> <#> <#>
Values = 1 1 10
Functions = none event_battle_test
Params = 75 1 0 0
[event10]
Name = EVENT CHECK FIGHTERS
Mnemonic = FghtrChk
; Values = <#> <#> <game_turns?>
Values = 1 1 100
Functions = none event_check_fighters
Params = 5 0 0 0
[event11]
Name = EVENT MAGIC FOE
Mnemonic = MagcFoe
; Values = <#> <#> <game_turns?>
Values = 2 2 100
Functions = none event_attack_magic_foe
Params = 1 5 0 0
[event12]
Name = EVENT CHECK ROOMS FULL
Mnemonic = RomFull
; Values = <#> <#> <game_turns_interval>
Values = 3 3 400
Functions = none event_check_rooms_full
Params = 0 0 0 0
; Builds a new room if all rooms of that room type are at full capacity
; Does not build replacement room when the last one is claimed/destroyed because it doesn't get a chance to reach full capacity
; Affects: Lair, Treasury, Training Room, Library; have yet to test others
; Does not affect: Hatchery; have yet to test others
; Requires the room's main process or RoomAll3/RoomAll4 (no link with RoomTres4/RoomLair4)
; Unlike other events, RomFull's game_turns value seems to be an interval check rather than a cooldown
[event13]
Name = EVENT SAVE IMPS
Mnemonic = SaveImp
; Values = <#> <#> <game_turns_cooldown?>
Values = 4 4 40
Functions = none event_check_imps_danger
Params = 0 0 0 0
[event14]
Name = EVENT PAY DAY
Mnemonic = PayDay1
; Values = <#> <#> <game_turns_cooldown?>
Values = 0 12 1195
Functions = event_check_payday none
Params = 0 0 0 0
[event15]
Name = UNUSED
[event16]
Name = UNUSED
[event17]
Name = UNUSED
[event18]
Name = UNUSED
[event19]
Name = UNUSED
[event20]
Name = UNUSED
[event21]
Name = UNUSED
[event22]
Name = UNUSED
[event23]
Name = UNUSED
[event24]
Name = UNUSED
[event25]
Name = UNUSED
[event26]
Name = UNUSED
[event27]
Name = UNUSED
[event28]
Name = UNUSED
[event29]
Name = UNUSED
[event30]
Name = UNUSED
[event31]
Name = UNUSED
;---------------------------------------------------------------;
;-------------------------- Computers --------------------------;
;---------------------------------------------------------------;
; Definition of computer players
; Every computer player can have 20 processes, 14 checks and 12 events attached
[computer0]
Name = General build, defend and attack Computer
NameTextID = 201
TooltipTextID = 201
; Values = <workload> <processes_time> <click_rate> <max_room_build_tasks> <turn_begin> <sim_before_dig> <#>
Values = 60 1 1 1 100 1 5
Processes = RoomTresr RoomLair DigEntrn DigClGold RoomHatch RoomRsrch RoomWrksh RoomTrain SplSOE AttckSafe Attck1 RoomPrisn RoomTortr RoomBarrc RoomGrave RoomTempl RoomScavn
Checks = Hates1 MvBest1 MvTrain1 ImpEngh1 DnPrtty1 AtckQck1 SplSpdu1 ImpSlap1 EnEntrn1 DoorAvl NeutPlc1 TrapAvl1 RoomExp1 Money1
Events = DnBreach AttkRom1 AttkHrt1 RomFTrsr RomFLair Fight1 FghTest FghtrChk MagcFoe RomFull SaveImp PayDay1
; <workload> - how much the AI takes into consideration the imp workload before tagging gold and rooms; to be precise it defines the percent of total dungeon area to be compared against the total number of imp tasks to determine whether to tag gold and rooms; a higher value means waiting for less imp tasks to completed and lower means waiting for more
; <processes_time> - game turns between performing processes
; <click_rate> - game turns between each room tile placed and each dirt highlighted
; <max_room_build_tasks> - how many rooms can be built at once
; <turn_begin> - game turns until AI initializes
; <sim_before_dig>
; <#>
; Processes - executed in their priority order, or their listed order when priority values are the same
; Checks - execute check once every <game_turns_interval>
; Events - execute event instantaneously when it occurs, then has a cooldown of <game_turns_cooldown> during which it cannot be triggered
[computer1]
Name = Build and defend Computer
NameTextID = 201
TooltipTextID = 201
Values = 70 1 8 1 100 1 5
Processes = RoomTresr RoomLair RoomHatch DigEntrn DigGold RoomRsrch RoomWrksh RoomTrain DigGrGold SplSOE RoomPrisn RoomTortr RoomBarrc RoomGrave RoomTempl RoomScavn AttckSafe
Checks = Hates2 MvBest1 MvTrain1 ImpEngh2 DnPrtty2 AtckQck2 SplSpdu1 ImpSlap2 EnEntrn2 DoorAvl TrapAvl1 RoomExp2 Money1
Events = AttkHrt1 DnBreach AttkRom1 RomFTrsr RomFLair Fight1 FghTest FghtrChk MagcFoe RomFull SaveImp PayDay1
[computer2]
Name = Build and defend Computer
NameTextID = 201
TooltipTextID = 201
Values = 90 1 10 1 100 1 5
Processes = RoomTresr RoomLair DigClGold RoomHatch DigEntrn RoomRsrch RoomWrksh RoomTrain SOEScare RoomPrisn RoomTortr RoomBarrc RoomGrave RoomTempl
Checks = Hates3 MvBest1 MvTrain1 ImpEngh3 SplSpdu1 ImpSlap1 DoorAvl RoomExp3 TrapAvl1 AtckQck3 Money1
Events = AttkHrt1 DnBreach AttkRom1 RomFTrsr RomFLair Fight1 FghTest FghtrChk MagcFoe RomFull SaveImp PayDay1
[computer3]
Name = Build and defend Computer
NameTextID = 201
TooltipTextID = 201
Values = 70 1 10 1 100 1 5
Processes = RoomTres4 RoomLair4 RoomAll3 DigEntrn DigClGold AttckSafe
Checks = Hates4 MvBest1 ImpEngh4 SplSpdu1 ImpSlap1 DoorAvl TrapAvl1 RoomExp2 Money1
Events = AttkHrt1 DnBreach AttkRom1 RomFTrsr RomFLair Fight1 FghTest FghtrChk MagcFoe RomFull SaveImp PayDay1
[computer4]
Name = Build basic 4x4 and defend Computer
NameTextID = 201
TooltipTextID = 201
Values = 70 1 6 1 100 1 5
Processes = RoomTres4 RoomLair4 DigEntrn DigClGold RoomAll4 AttckSafe
Checks = Hates4 MvBest1 ImpEngh4 SplSpdu1 ImpSlap1 DoorAvl NeutPlc2 TrapAvl1 RoomExp5 Money1
Events = AttkHrt1 DnBreach AttkRom1 RomFTrsr RomFLair Fight1 FghTest FghtrChk MagcFoe RomFull SaveImp PayDay1
[computer5]
Name = Build and defend Computer
NameTextID = 201
TooltipTextID = 201
Values = 85 1 10 1 500 1 10
Processes = RoomTres4 RoomLair4 DigEntrn DigClGold RoomAll4 AttckSafe SplSOE
Checks = Hates4 MvBest1 ImpEngh5 DnPrtty2 SplSpdu1 ImpSlap1 DoorAvl NeutPlc3 TrapAvl1 RoomExp5 Money1
Events = AttkHrt1 DnBreach AttkRom1 RomFTrsr RomFLair Fight2 FghTest FghtrChk MagcFoe RomFull SaveImp PayDay1
[computer6]
Name = Computer Assist
NameTextID = 201
TooltipTextID = 729
Values = 95 1 1 1 100 1 5
Processes = RoomTresr RoomLair DigEntrn DigClGold RoomHatch RoomRsrch RoomWrksh RoomTrain SplSOE AttckSafe Attck1 RoomPrisn RoomTortr RoomBarrc RoomGrave RoomTempl RoomScavn
Checks = Hates4 MvBest1 ImpEngh6 DnPrtty2 AtckQck4 SplSpdu1 ImpSlap1 EnEntrn1 DoorAvl NeutPlc4 TrapAvl2 RoomExp5 Money1
Events = AttkHrt1 DnBreach AttkRom1 RomFTrsr RomFLair Fight1 FghTest FghtrChk MagcFoe RomFull SaveImp PayDay1
[computer7]
; This computer assistant is the AI used for -1player Skirmish
Name = Computer Assist
NameTextID = 201
TooltipTextID = 730
Values = 45 1 1 1 100 1 5
Processes = RoomTresr RoomLair RoomHatch DigClGold DigEntrn RoomRsrch RoomWrksh RoomTrain RoomPrisn RoomTortr RoomBarrc RoomGrave RoomTempl RoomScavn
Checks = Hates4 MvBest1 ImpEngh6 DnPrtty2 SplSpdu1 ImpSlap1 DoorAvl NeutPlc5 TrapAvl2 RoomExp5 Money1
Events = AttkHrt1 DnBreach AttkRom1 RomFTrsr RomFLair Fight1 FghTest FghtrChk MagcFoe RomFull SaveImp PayDay1
[computer8]
Name = Computer Assist
NameTextID = 201
TooltipTextID = 731
Values = 50 1 1 1 100 1 5
Processes = RoomTresr RoomLair RoomHatch RoomRsrch RoomWrksh RoomTrain DigEntrn RoomPrisn RoomTortr RoomBarrc RoomGrave RoomTempl RoomScavn
Checks = TrapAvl1 DoorAvl RoomExp6
Events = AttkHrt1 RomFTrsr RomFLair
[computer9]
Name = Computer Assist
NameTextID = 201
TooltipTextID = 732
Values = 95 1 1 1 100 1 5
Processes = SplSOE AttckSafe Attck1 SplSOE
Checks = MvBest1 MvTrain1 ImpEngh7 SplSpdu1 ImpSlap1 TrapAvl1
Events = AttkHrt1 DnBreach AttkRom1 RomFTrsr RomFLair Fight1 FghTest FghtrChk MagcFoe RomFull SaveImp PayDay1
[computer10]
Name = Build and defend Computer
NameTextID = 201
TooltipTextID = 201
Values = 90 1 6 1 200 1 5
Processes = RoomTresr RoomLair DigEntrn DigClGold RoomHatch RoomRsrch RoomWrksh RoomTrain SplSOE AttckSafe Attck1 RoomPrisn RoomTortr RoomBarrc RoomGrave RoomTempl RoomScavn
Checks = Hates1 MvBest2 MvTrain1 ImpEngh7 AtckQck5 SplSpdu1 ImpSlap1 EnEntrn1 DoorAvl NeutPlc6 TrapAvl2 RoomExp5 Money1
Events = AttkHrt1 DnBreach AttkRom1 RomFTrsr RomFLair Fight1 FghTest FghtrChk MagcFoe RomFull SaveImp PayDay1
[computer11]
Name = Build and defend Computer
NameTextID = 201
TooltipTextID = 201
Values = 60 1 1 1 100 1 5
Processes = RoomTresr RoomLair RoomHatch DigEntrn RoomRsrch RoomWrksh RoomTrain SplSOE AttckSafe Attck1 RoomPrisn RoomTortr RoomBarrc RoomGrave RoomTempl RoomScavn
Checks = Hates1 MvBest1 MvTrain1 ImpEngh7 DnPrtty1 AtckQck6 SplSpdu1 ImpSlap1 EnEntrn1 DoorAvl NeutPlc7 TrapAvl1 RoomExp5 Money1
Events = AttkHrt1 DnBreach AttkRom2 RomFTrsr RomFLair Fight1 FghTest FghtrChk MagcFoe RomFull SaveImp PayDay1
[computer12]
Name = Rapid Gold Digging Computer With Imp Army
NameTextID = 201
TooltipTextID = 201
Values = 60 1 1 1 1 1 1
Processes = DigGrGld2 DigGrGld2 DigGrGld2 DigGrGld2
Checks = ImpEngh8 SplSpdu2 ImpSlap3
Events = MagcFoe
I thought this file was too sparsely commented. YourMaster do you have the answers? What all the values and params mean. I only figured out a few myself.
I used command line options -compuchat frequent -alex -nointro -fps 1000 to make testing easier, and since the AI is the computer assistant in -1player you can watch how he highlights dirt, so intervals are particularly easy to figure out.
The values I'm most curious about are the ones in the computers section at the bottom.