Difference between revisions of "Combat Rules"
Dom Queron (Talk | contribs) m (→Defense Rating) |
m |
||
Line 15: | Line 15: | ||
==== Hit Resolution ==== | ==== Hit Resolution ==== | ||
− | Hit resolution is implemented in the function [[combat_h.nss#Combat_GetAttackResult|Combat_GetAttackResult]] in the script library [[combat_h.nss]], which is invoked from the [[creature_core]] script whenever an attack event is received. The function returns one of several [[COMBAT_RESULT|COMBAT_RESULT_*]] constants and handles messaging to the game engine which animation to play. | + | Hit resolution is implemented in the function [[combat_h.nss#Combat_GetAttackResult|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|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. | Overall, Dragon Age: Origin's combat system is 'hit heavy' as a targets armor does not modify it's chance of getting hit. |
Revision as of 03:07, 28 October 2009
This page is work in progress
Contents
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.
- 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.