Combat Rules

From Dragon Age Toolset Wiki
Revision as of 03:36, 28 October 2009 by Georg Zoeller (Talk | contribs) (Backstab Determination)

Jump to: navigation, search

This page is work in progress

Overview

This page describes the technical implementation and flow of combat logic in the game scripts. It deals mostly with weapon based combat, for spells and abilities, please see Abilities.

Note: The term 'property' used on this page refers to Creature Properties.

Detailed Description

Combat in Dragon Age: Origin is handled mainly through scripts - the game engine itself has little knowledge of rule concepts such as 'Strength', 'Damage Modifier' or 'Armor Penetration'.


Hit Resolution

Hit resolution is implemented in the function Combat_GetAttackResult in the script library combat_h.nss, which is invoked from the creature_core.nss script whenever an attack event is received. The function returns one of several COMBAT_RESULT_* constants and handles messaging to the game engine which animation to play.

Overall, Dragon Age: Origin's combat system is 'hit heavy' as a targets armor does not modify it's chance of getting hit.

The simplified decision tree for to hit resolution is as follows:

if Target Is Placeable Object
  return COMBAT_RESULT_HIT
 
if Target Displacement/Dodge < RandomF(100.0)
  return COMBAT_RESULT_MISS  
 
if Attacker Is Using BASE_ITEM_TYPE_STAFF
  return COMBAT_RESULT_HIT
 
bHit = RandomF(100.0) < AttackRating - DefenseRating
bCrit = CheckCricital()
bBackstab = CheckBackstab()
 
if bHit
  if  HasEffect(attacker, EFFECT_TYPE_MISDIRECTION_HEX)
    if bCrit OR bBackstab
      return COMBAT_RESULT_HIT
    else
      return COMBAT_RESULT_MISS
 
 if bBackstab
    return COMBAT_RESULT_BACKSTAB
  else
     if bCrit
       return COMBAT_RESULT_CRITICAL_HIT
     else
       return  COMBAT_RESULT_HIT
 
  else
   return COMBAT_RESULT_MISS
Attack Rating

Attack rating includes:

  • Base attack value (54.0f)
  • + Flanking Bonus (position based, modified by attacker and enemy talents and effects as well as shields. Rogues have a bonus here).
  • + Distance based penalties (for ranged attacks)
  • + Attacker's attack property value (this includes modifiers from buffs, etc.)
  • + Any +attack item bonuses on the weapon that performs the attack.
  • + Any external bonuses or penalties passed into the function (from talent scripts, etc.)
  • + Difficulty setting based modifications


Defense Rating

Defense rating includes:

  • Defender defense value or missile deflection if attack was ranged. This includes items, effects and magical bonus.
  • Yes, this means that avoiding archers is hard for characters without a shield.
  • Difficulty setting based modifications
Flanking Bonus Determination
  • Flanking bonus is a floating point value that applies to both AttackRating and to the chance to score a critical hit.
  • It is essentially a representation of close the character is to the best position when attacking the enemy (directly in the back)
  • Various shield abilities on the target reduce or prevent the attacker from getting the bonus.
  • The further away the character is from that position, the more the bonus is diluted.
  • The magnitude of the bonus ranges from +0 to +15 (+20 with combat_movement) and is applied to AttackRating and partially (1+(FlankingBonus/5)) to critical hit chance.
  • Most characters only flank 60 degrees in each direction, combat movement allows an increase to 90 degrees (the full back 180).
  • Only rogues get the full flanking bonus, everyone else still gets half.
  • The full logic is implemented in the function Combat_GetFlankingBonus in combat_h.nss.
Backstab Determination
  • Backstab is determined for each melee attack only.
  • Backstab requires the attacker to have a flanking bonus > 0 (some talents waive this restriction)
  • Only creatures with the Rogue Character Class may backstab. This is a class benefit.
  • Only humanoid attackers can backstab (this includes darkspawn)
  • The full logic is implemented in the function Combat_CheckBackstab in combat_h.nss.

Damage Resolution