# Ability Configuration Files This directory contains YAML configuration files that define all abilities in the game. ## Format Each ability is defined in a separate `.yaml` file with the following structure: ```yaml ability_id: "unique_identifier" name: "Display Name" description: "What the ability does" ability_type: "attack|spell|skill|item_use|defend" base_power: 0 # Base damage or healing damage_type: "physical|fire|ice|lightning|holy|shadow|poison" scaling_stat: "strength|dexterity|constitution|intelligence|wisdom|charisma" scaling_factor: 0.5 # Multiplier for scaling stat mana_cost: 0 # MP required to use cooldown: 0 # Turns before can be used again is_aoe: false # Whether it affects multiple targets target_count: 1 # Number of targets (0 = all enemies) effects_applied: [] # List of effects to apply on hit ``` ## Effect Format Effects applied by abilities use this structure: ```yaml effects_applied: - effect_id: "unique_id" name: "Effect Name" effect_type: "buff|debuff|dot|hot|stun|shield" duration: 3 # Turns before expiration power: 5 # Damage/healing/modifier per turn stat_affected: "strength" # For buffs/debuffs only (null otherwise) stacks: 1 # Initial stack count max_stacks: 5 # Maximum stacks allowed source: "ability_id" # Which ability applied this ``` ## Effect Types | Type | Power Usage | Example | |------|-------------|---------| | `buff` | Stat modifier (×stacks) | +5 strength per stack | | `debuff` | Stat modifier (×stacks) | -3 defense per stack | | `dot` | Damage per turn (×stacks) | 5 poison damage per turn | | `hot` | Healing per turn (×stacks) | 8 HP regeneration per turn | | `stun` | Not used | Prevents actions for duration | | `shield` | Shield strength (×stacks) | 50 damage absorption | ## Damage Calculation Abilities calculate their final power using this formula: ``` Final Power = base_power + (scaling_stat × scaling_factor) Minimum power is always 1 ``` **Examples:** - Fireball with 30 base_power, INT scaling 0.5, caster has 16 INT: - 30 + (16 × 0.5) = 38 power - Shield Bash with 10 base_power, STR scaling 0.5, caster has 20 STR: - 10 + (20 × 0.5) = 20 power ## Loading Abilities Abilities are loaded via the `AbilityLoader` class: ```python from app.models.abilities import AbilityLoader loader = AbilityLoader() fireball = loader.load_ability("fireball") power = fireball.calculate_power(caster_stats) ``` ## Example Abilities ### basic_attack.yaml - Simple physical attack - No mana cost or cooldown - Available to all characters ### fireball.yaml - Offensive spell - Deals fire damage + applies burning DoT - Costs 15 MP, no cooldown ### shield_bash.yaml - Vanguard class skill - Deals damage + stuns for 1 turn - Costs 5 MP, 2 turn cooldown ### heal.yaml - Luminary class spell - Restores health + applies regeneration HoT - Costs 10 MP, no cooldown ## Creating New Abilities 1. Create a new `.yaml` file in this directory 2. Follow the format above 3. Set appropriate values for your ability 4. Ability will be automatically available via `AbilityLoader` 5. No code changes required! ## Guidelines **Power Scaling:** - Basic attacks: 5-10 base power - Spells: 20-40 base power - Skills: 10-25 base power - Scaling factor typically 0.5 (50% of stat) **Mana Costs:** - Basic attacks: 0 MP - Low-tier spells: 5-10 MP - Mid-tier spells: 15-20 MP - High-tier spells: 25-30 MP - Ultimate abilities: 40-50 MP **Cooldowns:** - No cooldown (0): Most spells and basic attacks - Short (1-2 turns): Common skills - Medium (3-5 turns): Powerful skills - Long (5-10 turns): Ultimate abilities **Effect Duration:** - Instant effects (stun): 1 turn - Short DoT/HoT: 2-3 turns - Long DoT/HoT: 4-5 turns - Buffs/debuffs: 2-4 turns **Effect Power:** - Weak DoT: 3-5 damage per turn - Medium DoT: 8-12 damage per turn - Strong DoT: 15-20 damage per turn - Stat modifiers: 3-10 points per stack