Page 1 of 4 123 ... LastLast
Results 1 to 10 of 33

Thread: commenting keepcompp.cfg

  
  1. #1

    Default commenting keepcompp.cfg

    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.
    Last edited by burntonion; February 11th, 2018 at 13:29. Reason: updated

  2. #2

    Default Re: commenting keepcompp.cfg

    I don't know myself either, and I hate that this is so unclear. Same thing for tweaking computer players through the script. There are a few comments in the manual there by the way that are helpful.

    Incidentally, Spartahawk has recently volunteered to help work on KeeperFX, and since your message about computer7 I asked him to change that to pick a random computer in range 13~16 instead. That seems to be working so now I intend to design 4 distinctive computer models that are fun to play against in skirmish. This way the Computer Assistant can stay intact and are the computer players less predictable.
    So if while doing this either of us discover what some of the parameters or values do, I'll make comments in the keepcompp.cfg file for sure, and share in this topic.

    If you have any further input, or want to help defining these new computer players, that would be most appreciated.

    EDIT:
    Quote Originally Posted by burntonion View Post
    [CODE]
    [computer0]
    Name = General build, defend and attack Computer
    NameTextID = 201
    TooltipTextID = 201
    ; Values = <#> <processes_time> <click_rate> <#> <turn_begin> <#> <#>
    ; <#> - reaction time? no idea.
    ; <processes_time> - game turns between performing processes.
    ; <click_rate> - game turns between each room tile placed and each dirt highlighted
    ; <#> - when set to 0 the AI only claims a portal then stops
    ; <turn_begin> - game turns until AI initializes
    ; <#>
    ; <#>
    Values = 60 1 1 1 100 1 5
    ; The order the processes are listed in only determines their order when their Priority values are all the same. A higher priority value changes the order.
    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
    ; Values = <#> <processes_time> <click_rate> <#> <turn_begin> <#> <#>
    ; <#> - reaction time? no idea.
    ; <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 build at once.
    ; <turn_begin> - game turns until AI initializes
    ; sim_before_dig; - I guess 'sim' means simulate here, so try before actually building.
    ; <#>

    EDIT2: I believe the size of the LAIR is ignored because that is somehow overwritten by the portal limit for the player.
    Last edited by YourMaster; January 31st, 2018 at 19:09.

  3. #3

    Default Re: commenting keepcompp.cfg

    Unfortunately a lot of distinction you can make between default AI and new AI is by altering the values that all of them share. Which is good for mods but maybe not for the base game. I've been working on a mod myself which will have gameplay and AI changes.
    One example of something neat you can do is decrease room size across the board to like 3x3 and 2x2 Treasuries and decrease all RomFull,RomFLair,RomFTrsr <game_turns_interval> to 1 and watch the AI sprawl out across the map instead of building centralized. Also set DigGold/DigClGold/DigGrGold/DigGrGld2's <money_below> to a super high number to make AI dig more gold and thus place more treasuries as they fill up. Decrease DigEntrn's game turns to 1 so they don't wait around for a minute before they claim their portal (the player might even be able to claim the AI's portal before they're able to).

    Some of my biggest issues with AI at the moment are:
    -when he builds bridges you can claim them and sell only a few bridge tiles and the AI won't build to those bridge tiles, he's now blocked from attacking you.
    -needs to build bridges to isolated enemy hero archers or the AI will become kind of stuck with imps that keep getting scared and dying.
    -needs to create treasuries near gold otherwise the player will win simply via gold mining efficiency.

    More testing:
    None of the Values for [computer#] seem to affect 'Checks' (they have no affect on imp creation intervals at least).
    The 4th Param value for imp creation is now commented.
    ; <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.
    So if you set the Value <game_turns_interval> to 20 and 4th param to 1 then AI will never create more than 1 imp per second.

    Edited some comment inaccuracies and also added comment "AI will not execute dig process when has no treasure room" just handy to know these things.

    Quote Originally Posted by YourMaster View Post
    EDIT2: I believe the size of the LAIR is ignored because that is somehow overwritten by the portal limit for the player.
    Is that even necessary? I imagine it's thinking something like "I will build a 5x5 lair for every portal" but isn't RomFLair enough to handle that? When the lair fills up, it already creates a new lair. I'm unsure of how much you're able to edit the source. There's already a BUILD A LAIR ROOM 4x4 (RoomLair4) which is odd since it doesn't even work, it builds 5x5.
    Last edited by burntonion; February 3rd, 2018 at 21:11.

  4. #4

    Default Re: commenting keepcompp.cfg

    Yeah, not rebuilding bridges and not making any proxy treasure rooms (especially near gems) are real detriments. Just like the inability to get rid of useless creatures when stronger creatures are available in the pool. But stuff like that requires new functionality.

    However, when you found that CP7 was used in the code it was quite easy to change that to something else. Defining a computer player is indeed just setting the values, processes, events and checks from the list. However, there are still a few undefined checks and events.

  5. #5

    Default Re: commenting keepcompp.cfg

    I have not looked into the code of KeeperFX yet although I really should, but can the weak creature issue be resolved, albeit imperfectly, via a simple script command that kills off the computer players weaker creatures?

  6. #6

    Default Re: commenting keepcompp.cfg

    Well, yes and no. You could use the script to give the computer player all kind of advantages. Easier than simply killing the weak creatures is making weak creatures unavailable for the computer player. You can also give him more gold and pre-made rooms.
    But that's not really playing a skirmish anymore, where you simply have a map and an enemy and a fair fight.

  7. #7

    Default Re: commenting keepcompp.cfg

    lol here's what happens when you set <max_room_build_tasks> too high in combination with the settings I talked about earlier

    Click image for larger version. 

Name:	training room spam.jpg 
Views:	33 
Size:	723.4 KB 
ID:	1788

    silly ai you don't need that many training rooms

  8. #8

    Default Re: commenting keepcompp.cfg

    Quote Originally Posted by burntonion View Post
    Is that even necessary? I imagine it's thinking something like "I will build a 5x5 lair for every portal" but isn't RomFLair enough to handle that? When the lair fills up, it already creates a new lair. I'm unsure of how much you're able to edit the source. There's already a BUILD A LAIR ROOM 4x4 (RoomLair4) which is odd since it doesn't even work, it builds 5x5.
    I doubt it. And it's not 'build 5x5 for every portal", but "o, I can get 20 creatures, better build a large lair'. The RoomLair4 does work. Try including this line of code in your level script:
    MAX_CREATURES(ALL_PLAYERS,7)

  9. #9

    Default Re: commenting keepcompp.cfg

    I've already edited quite a few mistakes out of the first post so anyone feel free to correct me when you don't think I've got something right.

    ; Processes - executed in their priority order (or listed order when priority is 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

    Processes that repeat: DigEntrn DigGold DigClGold DigGrGold DigGrGld2 (probably: SplSOE SOEScare) (have yet to test: Attck1 AttckSafe)
    Executes process once to build one room: RoomLair RoomLair4 RoomTresr RoomTres4 RoomHatch RoomRsrch RoomWrksh RoomTrain RoomPrisn RoomTortr RoomBarrc RoomGrave RoomTempl RoomScavn
    RomFull allows any of the main room processes to be executed again.
    RoomAll3 and RoomAll4 have the same effect as listing all of the main room processes (RomFTrsr/RomFLair do not require RoomTresr/RoomLair when used with RoomAll#)

    RomFull Event
    ; 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

    RomFTrsr Event
    ; 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)

    RomFLair Event
    ; 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)

    If you remove RomFTrsr and RomFLair, it seems RomFull will usually handle their same functionality but I'm getting very inconsistent results in testing. There's probably a good reason why all three are used.

    Overall certainly confirming that claiming the AI's rooms and instantly selling them is the best strategy because they won't rebuild them except in Lair's case.
    Last edited by burntonion; February 3rd, 2018 at 22:04. Reason: updated

  10. #10

    Default Re: commenting keepcompp.cfg

    You say:
    Code:
    Events - tested if true every <game_turns_interval>
    This might be the case, but I believe the events have a value that's not about checking when it happens, but instead a cooldown. So if a heart is attacked or a hatchery is empty, don't put attention to this 20 times per second but instead only once every x gameturns.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •