mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 09:48:02 +00:00
302 lines
18 KiB
Plaintext
302 lines
18 KiB
Plaintext
# The amount of cards at which to stop considering mulligan
|
|
MULLIGAN_THRESHOLD=4
|
|
|
|
# Aggro preferences (enabling these will generally make the AI attack more aggressively into potential trades)
|
|
# If the following option is enabled, the AI will generally play aggressively, seeking trades on offense when possible
|
|
# (the following two parameters will then be ignored)
|
|
PLAY_AGGRO=false
|
|
# The chance to attack aggressively into a potential trade (works even if not playing all-out aggro, e.g. PLAY_AGGRO disabled,
|
|
# but only in more favorable conditions in that case - when ahead in life count and in parity or ahead in creature count)
|
|
CHANCE_TO_ATTACK_INTO_TRADE=0
|
|
# When enabled, the AI will attack into trading options when it's tapped out (note that this flag is ignored if PLAY_AGGRO
|
|
# is globally enabled). If disabled, the non-aggro AI will only attack into trades when it has mana open, thus having a chance
|
|
# to "bluff" (or use, if available) combat tricks at the same time.
|
|
ATTACK_INTO_TRADE_WHEN_TAPPED_OUT=false
|
|
# When enabled, the AI will run some additional checks in an attempt to avoid attacking into certain block situations
|
|
# when it can't deal at least some permanent damage to the defending creature/planeswalker or to at least one defending
|
|
# creature. Works in many but not all cases.
|
|
TRY_TO_AVOID_ATTACKING_INTO_CERTAIN_BLOCK=false
|
|
# If enabled, the AI will only randomly attack into a trade if its life pressure is lower than the opponent's.
|
|
RANDOMLY_ATKTRADE_ONLY_ON_LOWER_LIFE_PRESSURE=true
|
|
# When above zero, the AI will attack into trading options when the opponent is not tapped out, thus risking getting an
|
|
# unexpected combat trick or ability activation. Note that this chance is rolled separately after CHANCE_TO_ATTACK_INTO_TRADE
|
|
# has already succeeded.
|
|
CHANCE_TO_ATKTRADE_WHEN_OPP_HAS_MANA=0
|
|
# When enabled, the AI will use Berserk on offense to try to severely damage the opponent at the expense of the creature
|
|
USE_BERSERK_AGGRESSIVELY=false
|
|
# Try to hold combat tricks until blockers are declared in an attempt to trick the opponent into blocking a weak creature
|
|
# and dying to it (currently has some limitations, the AI will only try to do it to one creature)
|
|
TRY_TO_HOLD_COMBAT_TRICKS_UNTIL_BLOCK=false
|
|
# Chance to hold combat tricks until blockers are declared. If -1 is specified, this chance is not used, and the standard
|
|
# evaluation for offensive pump buff is used instead.
|
|
CHANCE_TO_HOLD_COMBAT_TRICKS_UNTIL_BLOCK=75
|
|
|
|
# Trade blocking preferences (enabling these will make the AI trade more aggressively when considering blocks,
|
|
# but only with creatures that are worse in abilities and have lower or the same power as the attacker). Note
|
|
# that the first option serves as a master toggle. If it is disabled, the following related options have no effect.
|
|
ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK=true
|
|
# If enabled, the AI will consider trade blocking even if its creature count is lower than the opponent's
|
|
RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS=false
|
|
# If the previous option is enabled, then the next option controls how big of a handicap in creature count the AI
|
|
# is allowed to have to still decide to trade
|
|
MAX_DIFF_IN_CREATURE_COUNT_TO_TRADE=0
|
|
# If enabled, the AI will also consider trading if it has a replacement creature in hand
|
|
ALSO_TRADE_WHEN_HAVE_A_REPLACEMENT_CREAT=false
|
|
# The allowed handicap in creature count when the AI wants to trade while having a replacement creature in hand
|
|
MAX_DIFF_IN_CREATURE_COUNT_TO_TRADE_WITH_REPL=0
|
|
# Min and max chance to randomly aggressively trade when blocking (note that it will become 100 if the AI is in danger)
|
|
MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=40
|
|
MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=65
|
|
# The decrease amount for the trade chance when trading against a non-token Embalm/Eternalize creature with a non-token
|
|
# creature that does not have Embalm/Eternalize
|
|
CHANCE_DECREASE_TO_TRADE_VS_EMBALM=50
|
|
|
|
# Options to save / preserve loyalty of planeswalkers
|
|
# Chance to trade a (worse or roughly equal) creature in order to save a planeswalker or preserve its loyalty
|
|
# (random favorable trades must be enabled)
|
|
CHANCE_TO_TRADE_TO_SAVE_PLANESWALKER=90
|
|
# Chance to trade a better creature for a worse one in order to save a planeswalker
|
|
CHANCE_TO_TRADE_DOWN_TO_SAVE_PLANESWALKER=0
|
|
# Creature evaluation threshold for which creatures to consider good candidates for chump blocking to protect a
|
|
# planeswalker (135 is about the level of a 1/2 nontoken creature with no abilities or a 2/2 token with no abilities)
|
|
# There is a separate option for evaluating token and nontoken creatures. Set both to -1 to disable chump blocking
|
|
# to protect planeswalkers.
|
|
THRESHOLD_NONTOKEN_CHUMP_TO_SAVE_PLANESWALKER=110
|
|
THRESHOLD_TOKEN_CHUMP_TO_SAVE_PLANESWALKER=135
|
|
# If enabled, the AI will not bother chump blocking to protect a planeswalker unless lethal damage is threatened to it
|
|
CHUMP_TO_SAVE_PLANESWALKER_ONLY_ON_LETHAL=true
|
|
|
|
# Options that allow the AI to attempt to optimize targeting for removal and damaging spells.
|
|
# If enabled, the AI will try not to target a creature with a damaging spell or spot removal in case
|
|
# this creature will die in current combat or to a spell which is currently on stack targeting it.
|
|
AVOID_TARGETING_CREATS_THAT_WILL_DIE=true
|
|
# If enabled, the AI will not evaluate the stack in case at least one counterspell is present on it,
|
|
# since the current AI is not smart enough to predict whether a kill spell on stack is countered or not.
|
|
DONT_EVAL_KILLSPELLS_ON_STACK_WITH_PERMISSION=true
|
|
|
|
# If AI would drop to this amount of life in combat, it'll try to defend itself more actively
|
|
AI_IN_DANGER_THRESHOLD=4
|
|
# If set to the same value, AI will be predictable. If set to higher, AI will randomly pick a value between the two
|
|
# for each evaluation, introducing some unpredictability.
|
|
AI_IN_DANGER_MAX_THRESHOLD=6
|
|
|
|
# Only works when AI cheating is enabled in preferences, otherwise does nothing
|
|
CHEAT_WITH_MANA_ON_SHUFFLE=true
|
|
|
|
# The chance for the AI to attempt to hold land drops until Main 2 when it's safe and when it has nothing to potentially
|
|
# do with the extra mana
|
|
HOLD_LAND_DROP_FOR_MAIN2_IF_UNUSED=100
|
|
# If enabled, the AI will not try to conceal its land drops until Main 2 if the only permanents it has in play are lands
|
|
# (usually in this case this accomplishes little but confuses the game a bit; disable for a little bit more unpredictability)
|
|
HOLD_LAND_DROP_ONLY_IF_HAVE_OTHER_PERMS=true
|
|
|
|
# Planechase logic
|
|
DEFAULT_MAX_PLANAR_DIE_ROLLS_PER_TURN=1
|
|
DEFAULT_MIN_TURN_TO_ROLL_PLANAR_DIE=3
|
|
DEFAULT_PLANAR_DIE_ROLL_CHANCE=50
|
|
PLANAR_DIE_ROLL_HESITATION_CHANCE=10
|
|
|
|
# Timings for moving equipment to other targets
|
|
MOVE_EQUIPMENT_TO_BETTER_CREATURES=from_useless_only
|
|
MOVE_EQUIPMENT_CREATURE_EVAL_THRESHOLD=60
|
|
PRIORITIZE_MOVE_EQUIPMENT_IF_USELESS=true
|
|
# If there's a sacrifice cost to reattach an aura/equipment to another target creature, how big of an evaluation difference
|
|
# should there be between the old target and the new one for the AI to decide to proceed with it.
|
|
SAC_TO_REATTACH_TARGET_EVAL_THRESHOLD=500
|
|
|
|
# Currently disabled
|
|
PREDICT_SPELLS_FOR_MAIN2=true
|
|
RESERVE_MANA_FOR_MAIN2_CHANCE=100
|
|
|
|
# If enabled, the AI will protect its permanents against curse auras with Hexproof, Shroud, and Protection
|
|
ACTIVELY_PROTECT_VS_CURSE_AURAS=true
|
|
|
|
# If enabled, the AI will target artifacts and non-aura enchantments with removal aggressively
|
|
ACTIVELY_DESTROY_ARTS_AND_NONAURA_ENCHS=true
|
|
|
|
# If enabled, the AI will prioritize removing creatures that it can't block at all (e.g. Flying in absence of flying
|
|
# blockers). This is a master toggle. If disabled, the following three options do nothing.
|
|
ACTIVELY_DESTROY_IMMEDIATELY_UNBLOCKABLE=false
|
|
# How many unblockable creatures can there be when the AI should still consider prioritizing something (when there are
|
|
# too many, probably it's just worth going for the biggest threat overall instead)
|
|
DESTROY_IMMEDIATELY_UNBLOCKABLE_THRESHOLD=2
|
|
# Only consider prioritizing the destruction of immediately unblockable creatures if life is in danger
|
|
DESTROY_IMMEDIATELY_UNBLOCKABLE_ONLY_IN_DNGR=true
|
|
# How much life can there remain after a swing of the immediately unblockable creature for it to be considered dangerous
|
|
# for the purpose of previous option
|
|
DESTROY_IMMEDIATELY_UNBLOCKABLE_LIFE_IN_DNGR=5
|
|
|
|
# The chance that the AI will try to chain two damage spells or a damage spell and a debuffing pump spell to try to
|
|
# kill a bigger creature or a planeswalker. If set to 0, will be disabled. When enabled, will automatically become 100
|
|
# if the AI is in danger of dying.
|
|
CHANCE_TO_CHAIN_TWO_DAMAGE_SPELLS=25
|
|
|
|
# The chance that the AI will try to hold on to a direct damage spell with X in its cost (e.g. Blaze, Fireball, etc.)
|
|
# so that it doesn't cast it too early in the game against an early game target. Note that when in danger or when the
|
|
# AI has a chance to finish the opponent off with such a spell, it will not hold back the spells.
|
|
HOLD_X_DAMAGE_SPELLS_FOR_MORE_DAMAGE_CHANCE=100
|
|
# This threshold defines the minimum amount of damage *or* the minimum number of the AI's turn in order to play a
|
|
# direct damage spell with X without holding it back. For example, if set to 5, the AI will prefer to hold the spell
|
|
# back (unless lethal/in danger) unless it can deal 5 or more damage with it or unless it's the AI's 5th turn or later.
|
|
HOLD_X_DAMAGE_SPELLS_THRESHOLD=6
|
|
|
|
# Permission timings
|
|
MIN_SPELL_CMC_TO_COUNTER=2
|
|
CHANCE_TO_COUNTER_CMC_1=0
|
|
CHANCE_TO_COUNTER_CMC_2=50
|
|
CHANCE_TO_COUNTER_CMC_3=100
|
|
ALWAYS_COUNTER_OTHER_COUNTERSPELLS=true
|
|
ALWAYS_COUNTER_DAMAGE_SPELLS=true
|
|
ALWAYS_COUNTER_CMC_0_MANA_MAKING_PERMS=true
|
|
ALWAYS_COUNTER_REMOVAL_SPELLS=true
|
|
ALWAYS_COUNTER_PUMP_SPELLS=false
|
|
ALWAYS_COUNTER_AURAS=true
|
|
ALWAYS_COUNTER_SPELLS_FROM_NAMED_CARDS=None
|
|
|
|
# Copy spell on stack logic
|
|
# The chance that the AI will copy its own stack right after placing it there while it has priority
|
|
CHANCE_TO_COPY_OWN_SPELL_WHILE_ON_STACK=0
|
|
# If the copied spell costs this much more than the copy spell, the chance to copy the spell will become 100
|
|
ALWAYS_COPY_SPELL_IF_CMC_DIFF=4
|
|
|
|
# Storm spell logic
|
|
PRIORITY_REDUCTION_FOR_STORM_SPELLS=9
|
|
MIN_COUNT_FOR_STORM_SPELLS=1
|
|
|
|
# Logic for Strip Mine, Wasteland, Ghost Quarter and other similar sac-destroy lands marked with
|
|
# AILogic$ LandForLand or GhostQuarter.
|
|
STRIPMINE_MIN_LANDS_IN_HAND_TO_ACTIVATE=1
|
|
STRIPMINE_MIN_LANDS_FOR_NO_TIMING_CHECK=9999
|
|
STRIPMINE_MIN_LANDS_OTB_FOR_NO_TEMPO_CHECK=8
|
|
STRIPMINE_MAX_LANDS_TO_ATTEMPT_MANALOCKING=3
|
|
STRIPMINE_HIGH_PRIORITY_ON_SKIPPED_LANDDROP=true
|
|
|
|
# The default chance to use the token-generation abilities
|
|
TOKEN_GENERATION_ABILITY_CHANCE=80
|
|
# Situations where the AI should always use the token-generation abilities if possible
|
|
TOKEN_GENERATION_ALWAYS_IF_FROM_PLANESWALKER=true
|
|
TOKEN_GENERATION_ALWAYS_IF_OPP_ATTACKS=true
|
|
# Flash AI toggles
|
|
# Master toggle: if enabled, a more advanced Flash consideration logic will be enabled (probably slower),
|
|
# which will also enable all the following toggles.
|
|
FLASH_ENABLE_ADVANCED_LOGIC=true
|
|
# The chance the AI will obey SVar AmbushAI to try to surprise the opponent after the attack is declared
|
|
# (e.g. Hixus, Prison Warden)
|
|
FLASH_CHANCE_TO_OBEY_AMBUSHAI=100
|
|
# The chance the AI will cast the Flash creature at instant speed purely for the fact that it has a ETB effect.
|
|
FLASH_CHANCE_TO_CAST_DUE_TO_ETB_EFFECTS=100
|
|
# The chance the AI may cast the Flash creature with ETB effects even earlier than its own Main 1 to try to benefit
|
|
# from the ETB effect (most likely suboptimal and many mana lock the AI, so keep this at a lower chance normally).
|
|
FLASH_CHANCE_TO_CAST_FOR_ETB_BEFORE_MAIN1=0
|
|
# The chance the AI may cast the Flash creature with ETB effects in response to an opposing spell on stack.
|
|
# Quite basic right now, and may do stupid things more often than not, so better left disabled until improved
|
|
# (or at a low chance).
|
|
FLASH_CHANCE_TO_RESPOND_TO_STACK_WITH_ETB=0
|
|
# The chance the AI will attempt to add a new blocker in combat where it's low on creature count compared to the
|
|
# number of attacking creatures.
|
|
FLASH_CHANCE_TO_CAST_AS_VALUABLE_BLOCKER=100
|
|
# If enabled, the AI will try to hold off playing auras with Flash until the declare blockers step in combat.
|
|
# If disabled, but advanced logic is enabled, will generally try to play these auras before its own turn.
|
|
FLASH_USE_BUFF_AURAS_AS_COMBAT_TRICKS=true
|
|
# The chance that the AI will cast a flash aura enchantment at the earliest opportunity
|
|
FLASH_BUFF_AURA_CHANCE_TO_CAST_EARLY=0
|
|
# The chance that the AI will cast a flash aura at the end of turn before its own turn
|
|
FLASH_BUFF_AURA_CHANCE_CAST_AT_EOT=5
|
|
# The chance that the AI will respond to stack with a flash aura which makes sense in context
|
|
FLASH_BUFF_AURA_CHANCE_TO_RESPOND_TO_STACK=100
|
|
|
|
# Scry AI toggles
|
|
# The total number of mana-producing lands at which the AI will still consider scrying away non-lands
|
|
SCRY_NUM_LANDS_TO_STILL_NEED_MORE=4
|
|
# The total number of mana-producing lands at which the AI will stop considering scrying such lands to top
|
|
SCRY_NUM_LANDS_TO_NOT_NEED_MORE=8
|
|
# The total number of creatures when the AI will consider scrying away the ones that are below average in
|
|
# evaluation score for the deck
|
|
SCRY_NUM_CREATURES_TO_NOT_NEED_SUBPAR_ONES=4
|
|
# The total number of creatures on board at which to start considering scrying away low CMC creatures
|
|
# as defined in the two following options
|
|
SCRY_EVALTHR_CREATCOUNT_TO_SCRY_AWAY_LOWCMC=3
|
|
# The evaluation score at which the AI will consider the creature bad enough to scry it away in case it's
|
|
# low CMC (see the next option) and the AI already has higher CMC creatures on board
|
|
SCRY_EVALTHR_TO_SCRY_AWAY_LOWCMC_CREATURE=160
|
|
# The CMC threshold at which (and below which) the AI considers creatures to be "low CMC" for the purpose
|
|
# of the previous option
|
|
SCRY_EVALTHR_CMC_THRESHOLD=3
|
|
# If enabled, the AI will scry cards that it can't immediately cast to the bottom
|
|
SCRY_IMMEDIATELY_UNCASTABLE_TO_BOTTOM=true
|
|
# How big of a CMC difference between the currently castable and the considered card's CMC is allowed before
|
|
# the card is considered not immediately castable for the purpose of the previous option
|
|
SCRY_IMMEDIATELY_UNCASTABLE_CMC_DIFF=3
|
|
# Surveil AI toggles (currently the AI uses Scry logic for the majority of other decisions)
|
|
# If the AI has this many or fewer cards in the library, it will Surveil to the top of the library in order
|
|
# not to deplete the library.
|
|
SURVEIL_NUM_CARDS_IN_LIBRARY_TO_BAIL=10
|
|
# If the AI will have less life than the specified percentage as a result of activating a Surveil ability
|
|
# that requires a life playment, it will not pay life to activate it (e.g. Doom Whisperer).
|
|
SURVEIL_LIFEPERC_AFTER_PAYING_LIFE=75
|
|
|
|
# Attempt to predict the number of potential blockers with various forms of evasion when
|
|
# deciding to do an all-in assault attack
|
|
COMBAT_ASSAULT_ATTACK_EVASION_PREDICTION=true
|
|
# Attempt to predict the number of potential blockers with various forms of evasion when
|
|
# deciding to do an attrition race attack
|
|
COMBAT_ATTRITION_ATTACK_EVASION_PREDICTION=true
|
|
|
|
# AILogic$ PayEnergyConservatively (used for Britsling Hydra and Longtusk Cub) will only
|
|
# be used in case the creature is engaged in favorable combat
|
|
CONSERVATIVE_ENERGY_PAYMENT_ONLY_IN_COMBAT=true
|
|
# If true, the conservative energy payment will not be used when the creature is attacking,
|
|
# only when it's blocking (for more controlling AIs)
|
|
CONSERVATIVE_ENERGY_PAYMENT_ONLY_DEFENSIVELY=true
|
|
|
|
# How big of a value difference there should be for the AI to consider mass bouncing all creature permanents
|
|
# on both sides of the battlefield in a non-lethal situation
|
|
BOUNCE_ALL_TO_HAND_CREAT_EVAL_DIFF=200
|
|
BOUNCE_ALL_ELSEWHERE_CREAT_EVAL_DIFF=200
|
|
# How big of a CMC difference there should be for the AI to consider mass bouncing all noncreature permanents
|
|
# on both side of the battlefield
|
|
BOUNCE_ALL_TO_HAND_NONCREAT_EVAL_DIFF=3
|
|
BOUNCE_ALL_ELSEWHERE_NONCREAT_EVAL_DIFF=3
|
|
|
|
# Use a blink spell to reload a planeswalker's loyalty (e.g. Teferi's Time Twist)
|
|
# A chance (per check) to activate this ability
|
|
BLINK_RELOAD_PLANESWALKER_CHANCE=15
|
|
# Maximum loyalty at which the planeswalker needs to be in order to activate the blink-reload
|
|
BLINK_RELOAD_PLANESWALKER_MAX_LOYALTY=2
|
|
# The difference between maximum loyalty and base loyalty of the planeswalker in order to consider blink-reloading it
|
|
BLINK_RELOAD_PLANESWALKER_LOYALTY_DIFF=2
|
|
|
|
# If enabled, the AI will try to pair up cards to present to the opponent so that a specific card may be picked,
|
|
# it'll also try to grab Accumulated Knowledge and Take Inventory more actively, as well as interact with the Trix
|
|
# combo deck more appropriately. In Reanimator decks, this logic will make the AI pick the fattest threats in the
|
|
# library to put some into the graveyard.
|
|
INTUITION_ALTERNATIVE_LOGIC=true
|
|
|
|
# If enabled, the AI will run some additional checks in order to try to preserve spells that have Buyback and not
|
|
# use them unless absolutely necessary (or unless multiple copies are in hand).
|
|
TRY_TO_PRESERVE_BUYBACK_SPELLS=true
|
|
|
|
# How big of a difference is allowed between the revealed card CMC and the currently castable CMC to still put the
|
|
# card on top of the library
|
|
EXPLORE_MAX_CMC_DIFF_TO_PUT_IN_GRAVEYARD=2
|
|
# The number of lands on the battlefield when the AI would use Explore to put non-land cards in graveyard if it
|
|
# doesn't have a land in hand
|
|
EXPLORE_NUM_LANDS_TO_STILL_NEED_MORE=2
|
|
|
|
# Momir/MoJhoSto casual variant properties
|
|
# Which lands the AI would prefer to play in Momir Basic and MoJhoSto modes. When set to "default", generally plays
|
|
# lands in WUBRG order. When set to "random", will play a completely random basic land from hand. When set to
|
|
# "preforder:XXX", where "XXX" is a list of color specifications, will play basic lands in this preferred order,
|
|
# and if no preferred land can be found, will play a random one (e.g. "preforder:RB" plays Mountains first, Swamps
|
|
# second, and then everything else randomly if no Mountains or Swamps are present).
|
|
MOMIR_BASIC_LAND_STRATEGY=preforder:RB
|
|
# MoJhoSto only casual variant properties
|
|
# How many lands the AI needs to have on the battlefield to begin considering activating Jhoira in MoJhoSto
|
|
MOJHOSTO_NUM_LANDS_TO_ACTIVATE_JHOIRA=5
|
|
# The chance that the AI will activate Jhoira instead of activating Momir
|
|
MOJHOSTO_CHANCE_TO_PREFER_JHOIRA_OVER_MOMIR=50
|
|
# The chance that the AI will activate Jhoira's copy random instant ability (per phase, the AI will generally
|
|
# attempt this either in its upkeep or its draw phase or main 1).
|
|
MOJHOSTO_CHANCE_TO_USE_JHOIRA_COPY_INSTANT=15
|
|
|