Files
eagle0/docs/ai-quest-completion.md
T
e02afd112e Add documentation for AI quest completion behavior (#5928)
Documents which quests the AI proactively attempts to complete via
FulfillQuestsCommandSelector and which quests are not handled.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 22:49:23 -08:00

5.1 KiB

AI Quest Completion Behavior

This document describes which quests the AI attempts to complete proactively to recruit unaffiliated heroes.

Overview

The AI attempts to complete quests via FulfillQuestsCommandSelector, which is invoked by MidGameAIClient.chosenFulfillEasyQuestsCommand. The AI only considers quests from unaffiliated heroes in provinces ruled by a faction leader.

Quests the AI Actively Completes

Diplomacy Quests

Quest Handler Conditions
AllianceQuest AllianceQuestCommandChooser Target faction must meet trust conditions for alliance and not already be in an alliance
TruceWithFactionQuest TruceWithFactionQuestCommandChooser Target faction must meet trust conditions for truce
TruceCountQuest TruceCountQuestCommandChooser Picks a random faction that meets trust conditions and isn't already in a truce/alliance

Resource Giving Quests

Quest Handler Notes
AlmsToProvinceQuest AlmsToProvinceQuestCommandChooser Gives food to the specified province
AlmsAcrossRealmQuest AlmsAcrossRealmQuestCommandChooser Gives food from the province with the largest surplus
GiveToHeroesInProvinceQuest GiveToHeroesInProvinceQuestCommandChooser Gives gold to the hero with the lowest loyalty in the specified province
GiveToHeroesAcrossRealmQuest GiveToHeroesAcrossRealmQuestCommandChooser Gives gold from the province with the most gold available

Province Development Quests

Quest Handler Notes
ImproveAgricultureQuest ImproveQuestCommandChooser Issues an Improve command with Agriculture type
ImproveEconomyQuest ImproveQuestCommandChooser Issues an Improve command with Economy type
ImproveInfrastructureQuest ImproveQuestCommandChooser Issues an Improve command with Infrastructure type

Other Quests

Quest Handler Conditions
DismissSpecificVassalQuest DismissSpecificVassalCommandChooser Only if province has more than 2 heroes AND the unaffiliated hero's power >= target hero's power * RequiredPowerMultiplierForDismiss

Quests the AI Does Not Attempt to Complete

The following quests have no handler in FulfillQuestsCommandSelector and must be completed naturally through gameplay:

Combat/Military Quests

  • DefeatFactionQuest - Defeat a specific faction
  • GrandArmyQuest - Accumulate a large number of troops
  • UpgradeBattalionQuest - Upgrade a battalion to minimum armament/training
  • WinBattleOutnumberedQuest - Win a battle while outnumbered
  • WinBattlesQuest - Win a number of battles
  • RescueImprisonedLeaderQuest - Rescue an imprisoned leader from another faction

Expansion Quests

  • ExpandToProvincesQuest - Expand to control a certain number of provinces
  • SpecificExpansionQuest - Conquer a specific province
  • BorderSecurityQuest - Have troops in a border province

Prisoner Quests

  • ExecutePrisonerQuest - Execute a specific prisoner
  • ExilePrisonerQuest - Exile a specific prisoner
  • ReleasePrisonerQuest - Release a specific prisoner
  • ReturnPrisonerQuest - Return a prisoner to their faction
  • ReleaseAllPrisonersQuest - Release all prisoners

Province Order Quests

  • DevelopProvincesQuest - Maintain provinces in Develop order for months
  • MobilizeProvincesQuest - Maintain provinces in Mobilize order for months
  • RestProvinceQuest - Use the Rest command in a specific province

Reconnaissance Quests

  • ReconProvincesQuest - Reconnoiter a number of provinces
  • ReconSpecificProvincesQuest - Reconnoiter specific provinces

Economic Quests

  • TotalDevelopmentQuest - Achieve total development level in a province
  • WealthQuest - Accumulate gold and food
  • SpendOnFeastsQuest - Spend gold on feasts
  • SendSuppliesQuest - Send food to a specific province
  • RepairDevastationQuest - Repair devastation

Special Event Quests

  • SuppressRiotByForceQuest - Suppress a riot by force
  • FightBeastsAloneQuest - Fight beasts alone
  • StartBlizzardQuest - Start a blizzard in a province
  • StartEpidemicQuest - Start an epidemic in a province
  • ApprehendOutlawQuest - Apprehend an outlaw hero

Miscellaneous

  • BattalionDiversityQuest - Have diverse battalion types
  • SwearBrotherhoodWithHeroQuest - Swear brotherhood with a specific hero
  • BetrayAllyQuest - Betray an allied faction

Implementation Details

The quest completion logic is located in:

  • FulfillQuestsCommandSelector.scala - Main entry point, iterates through choosers
  • quest_command_selectors/ - Individual quest handlers

Each chooser extends either:

  • QuestCommandChooser - For quests requiring randomness
  • DeterministicQuestCommandChooser - For quests with deterministic command selection

The AI prioritizes quests in the order they appear in FulfillQuestsCommandSelector.choosers:

  1. Alliance
  2. TruceWithFaction
  3. Improve (Agriculture/Economy/Infrastructure)
  4. AlmsToProvince
  5. GiveToHeroesInProvince
  6. AlmsAcrossRealm
  7. GiveToHeroesAcrossRealm
  8. TruceCount
  9. DismissSpecificVassal