User:NtCarlson/Sandbox

From bg3.wiki
< User:NtCarlson
Revision as of 06:52, 4 November 2023 by NtCarlson (talk | contribs) (Added another DRS weapon)
Jump to navigation Jump to search

Damage Mechanics

Overview

Under the hood, superficially similar damage bonuses can be implemented in very different ways. For example, the Callous Glow Ring and the Caustic Band are both rings that give 2 bonus damage. However, their damage bonuses are implemented using two different functions and wind up behaving quite differently. Understanding how these different functions work will help explain the oftentimes unintuitive damage mechanics in Baldur's Gate 3.

Below is a breakdown of the different functions used to apply damage bonus effects.

Function Term Comment Example
WeaponDamage() Attack damage The basic, well-behaved damage bonuses are implemented with this function. The bonus will apply to only the triggering attack and nothing else. 2Damage TypesAcid from Caustic Band
CharacterWeaponDamage()
CharacterUnarmedDamage()
DamageBonus() Damage rider Damage bonuses using this function will add their damage to each independent damage instance. When combined with effects that use DealDamage(), a single attack can create numerous independent damage instances so DamageBonus() effects can potentially apply their damage many times per attack. 2Damage TypesRadiant from Callous Glow Ring
DealDamage() Damage rider source (DRS) This function is used by all damaging attacks, spells, and conditions to deal their damage, but some damage bonuses also use it. DealDamage() creates a separate damage instance that can be independently boosted by applicable DamageBonus() sources. In certain scenarios, DRS effects can trigger each other, creating far more damage instances than might be expected. 1d8Damage TypesPhysical from Colossus Slayer Colossus Slayer

The interaction between the different types of damage bonuses can be summarized as follows:

  • Attack damage bonuses do exactly what they say -- nothing more, nothing less.
  • The effect of damage riders is multiplicative with the number of independent damage instances. An attack with 2 extra damage instances from damage rider source effects will apply any damage riders 3 times.
  • The number of damage instances can grow exponentially with the number of damage rider sources. For example, if you Sneak Attack Sneak Attack a Burning Burning target with the Firestoker, you will create 4 independent damage instances: the base attack, the sneak attack, Burned Alive triggered by the base attack, and Burned Alive triggered by the sneak attack.

DamageBonus()

This is a comprehensive list of all the damage riders in the game that use DamageBonus() which can be acquired by the player. There are other DamageBonus() effects exclusive to certain enemies or attached to items not available in the game (outside of cheats). These effects are excluded from the list below.

If a damage type is not specified, the damage bonus will inherit the type from whatever damage source it is applied to.

DamageBonus() sources
Source Damage Bonus Conditions
Rhapsody 1, 2, or 3 Kill 3 creatures with the weapon to unlock the max bonus; resets each Long Rest[1]
Arcane Charge Arcane Charge Proficiency Bonus Target is threatened
Callous Glow Ring 2Damage TypesRadiant Target is illuminated (i.e. not Obscured)
Lightning Charges Lightning Charges 1Damage TypesLightning Have at least 1 Lightning Charge
Vampire Ascendant Vampire Ascendant 1d10Damage TypesNecrotic Available only to Astarion after ascending at the end of The Pale Elf
Spellmight Gloves 1d8 Spell with an attack roll[2]
Agonising Blast Agonising Blast Charisma modifier Damage TypesForce Eldritch Blast Eldritch Blast
Empowered Evocation Empowered Evocation Intelligence modifier Evocation spell
Potent Spellcasting Potent Spellcasting Wisdom modifier Cleric cantrip
Potent Robe Charisma modifier Any cantrip
Necklace of Elemental Augmentation Spellcasting Ability Modifier Elemental cantrip
Elemental Affinity: Damage Elemental Affinity: Damage Charisma modifier Spell/cantrip whose elemental type corresponds to the chosen draconic ancestry
Ring of Absolute Force 1Damage TypesThunder Applies only to Damage TypesThunder damage
Mourning Frost 1Damage TypesCold Applies only to Damage TypesCold damage
Armour of the Sporekeeper 1Damage TypesNecrotic Applies only to Damage TypesNecrotic damage
Poisoner's Robe 1d4Damage TypesPoison Damage TypesPoison spell
Heat Convergence Heat Convergence Number of Heat charges Requires and consumes Heat charges, applies only to Damage TypesFire damage
Markoheshkir Proficiency Bonus Elemental spell damage with the corresponding variant of Kereska's Favour active
Bestow Curse: Additional Damage Bestow Curse: Additional Damage 1d8Damage TypesNecrotic Spellcaster attacks Curse target
Hex Hex 1d6Damage TypesNecrotic Spellcaster attacks Hex target
Psionic Overload Psionic Overload 1d4Damage TypesPsychic Attack while Overloaded With Synaptic Power is active
Boots of Psionic Movement 1d4Damage TypesPsychic Next melee attack after flying flying as a Githyanki
Ring of Elemental Infusion 1d4 elemental Next weapon attack after using an elemental spell/cantrip
Cloak of Elemental Absorption 1d4 elemental Next weapon attack after using Absorb Elements
Shadow-Cloaked Ring 1d4 Unarmed attack[3]
Dolor Amarus 7 Critical Hit[4]
Vicious Battleaxe 7 Critical Hit[4]
Harmonic Dueller Charisma modifier Melee attack while Mellow Harmony is active
Titanstring Bow Strength modifier Ranged weapon attack
Scabby Pugilist Circlet 2 Unarmed or weapon attack with 2+ enemies within 3m
The Undead Bane 1d6Damage TypesSlashing Melee attack against a Fiend or Undead
Hammer of the Just 1d6Damage TypesBludgeoning Melee attack against a Fiend or Undead
  1. The damage bonus is not attached to the weapon. You will keep the Scarlet Remittance buff even after unequipping the dagger.
  2. Prior to Patch 4, this worked with any direct damage spell. More testing is needed to see what it works with after Patch 4.
  3. The Shadow-Cloaked Ring boosts both weapon and unarmed damage, but weapon damage is boosted using CharacterWeaponDamage().
  4. 4.0 4.1 The damage bonus applies to any Critical Hit, not just those made with this weapon.

DealDamage()

Attached vs detached instances

There are two sub-categories of DealDamage() instances: attached and detached.

  • A DealDamage() instance attached to an attack or spell will be grouped and indented under a heading like "X used Main Hand Attack" or "X cast Fire Ball". Most DRS effects will be attached to the triggering attack.
  • A detached DealDamage() instance will appear separately in the damage log, not grouped with the triggering attack. DRS effects wind up detached because they call DealDamage() indirectly. For example:
    • When standing in a Burning surface, the Amulet of Elemental Torment will effectively add a 1d4Damage TypesFire DRS. The amulet's effect doesn't call DealDamage() directly, but instead calls ApplyStatus(BURNING). On application, the Burning Burning status effect calls DealDamage() immediately.
    • To apply its 1d4Damage TypesThunder damage, the Punch-Drunk Bastard calls CreateExplosion() which then calls DealDamage().

The practical difference between attached and detached DRS sources is that some damage rider effects will not apply to detached sources. For example, the 1d4Damage TypesFire damage instance from the Amulet of Elemental Torment is detached from the spell cast and thus will not get boosted by damage riders like Potent Robe or Elemental Affinity: Damage Elemental Affinity: Damage which explicitly apply only to spell/cantrip attacks. It will, however, be boosted by more universal damage riders like Arcane Charge Arcane Charge.

Additional DRS sources attached to ordinary weapon attacks

This is a list of weapons that can get bonus attached DealDamage() instances with ordinary attacks. Since these damage instances are attached to a weapon attack, they will be boosted by applicable DamageBonus() sources.

Extra attached DealDamage() sources for ordinary weapon attacks
Source Damage Bonus Conditions
Assassin's Touch 1d4Damage TypesNecrotic Target is Knocked Out Knocked Out or Sleeping Sleeping
Deep Delver 1d4Damage TypesPiercing Target is Shattered. Deep Delver inflicts Shattered on hit.
Dragon's Grasp 1d4Damage TypesSlashing Target is Burning Burning
Exterminator's Axe 1d6Damage TypesFire Target is a plant, Myconid, or is size small or less
Firestoker 1d4Damage TypesPiercing Target is Burning Burning
Shortsword of First Blood 1d8Damage TypesPiercing Target must have 100% HP Icon.png hit points
Blooded Greataxe 1d4Damage TypesSlashing Wielder has 50% HP Icon.png hit points or less
Rat Bat 1d6Damage TypesPiercing Unlisted effect; always applies
Render of Mind and Body 1d8Damage TypesPsychic Attack with Advantage Icon.png Advantage
Sword of Life Stealing 10Damage TypesNecrotic Attack is a Critical hit
Crimson Mischief 7Damage TypesPiercing damage. Attack with Advantage Icon.png Advantage while equipped in the main hand
Duellist's Prerogative Proficiency Bonus Damage TypesNecrotic Requires and consumes a reaction; only applies while equipped in the main hand

Additional detached DRS sources triggered by ordinary weapon attacks

This is a list of weapons that can get bonus detached DealDamage() instances with ordinary attacks. Weapon attack related DamageBonus() sources will not apply to these extra damage instances since they are not directly attached to a weapon attack. Only the universal DamageBonus() sources will apply.

Extra detached DealDamage() sources from ordinary weapon attacks
Source Damage Bonus Notes
Loviatar's Scourge: Willing Whip 1d6Damage TypesNecrotic Hits everything in a 2m radius including the wielder
Punch-Drunk Bastard 1d4Damage TypesThunder Must be drunk drunk. Hits everything in a 3m radius excluding the wielder.
Nyrulna: Zephyr Connection 3d4Damage TypesThunder Must be thrown. Hits everything in a 6m radius including the wielder.

Additional DRS sources attached to weapon actions

This is a list of DealDamage() sources from special Weapon actions. These sources are inherently more limited by nature of being once-per-short-rest actions.

Extra DealDamage() sources from once-per-short-rest Weapon Actions
Source Damage Bonus Notes
Prepared (Condition) Prepared (Condition) Strength modifier Damage TypesSlashing Bonus applies to all melee attacks for the rest of the turn, including melee spells
Hoppy: Revitalising Strike Proficiency Bonus Damage TypesNecrotic Also heals you 1d6hit points
Very Heavy Greataxe: Gargantuan Cleave 1d6Damage TypesSlashing Hits up to 3 targets like a normal cleave but inflicts Off Balance Off Balance on the wielder
Soulbreaker Greatsword: Soulbreaker 4Damage TypesPsychic Can also Stun Stun the target (Constitution saving throw)
Silver Sword of the Astral Plane: Soulbreaker 4Damage TypesPsychic Can also Stun Stun the target (Constitution saving throw)
Moonlight Glaive: Moonlight Butterflies
Justiciar's Scimitar: Shadowsoaked Blow
The Undead Bane: Profane Scourge
Hellfire Greataxe: Hellflame Cleave
The Sacred Star: Dawnburst Strike Proficiency Bonus Damage TypesRadiant
Balduran's Giantslayer: Topple the Big Folk 2d6Damage TypesSlashing Target must have size Large or greater. Also adds your Proficiency Bonus to the base attack damage

Glossary

There is not necessarily any community consensus regarding the following terms and they may only make sense within the context of this article.

  • Attached: A damage instance attached to an attack or spell in the damage log.
  • Attack damage: A damage bonus implemented with WeaponDamage() or similar functions. These bonuses are well-behaved and will only ever apply once per attack.
  • Damage rider: A damage bonus implemented with DamageBonus(). These bonuses can potentially apply many times in a single attack since they boost each independent damage instance.
  • Damage rider source: A damage bonus implemented with DealDamage(). These bonuses create an independent damage instance instead of adding damage to an existing instance.
  • Detached: A damage instance not grouped with the triggering attack or spell in the damage log.
  • DRS: See damage rider source
  • Universal damage rider: A damage rider that doesn't have conditions like IsSpell() and can boost even detached damage instances.