Page 1 of 1

How OB, DB, and PB are Calculated

Posted: Mon Feb 02, 2015 11:18 am
by Thuvia
Most of the following information can be found by viewing the source coding for the Equipment Trainer. This post is designed to present the information in a somewhat more user-friendly form, so that all who wish may have a better understanding of how these things work.

April 1, 2016: As promised, status ailments and Position effects (standing/sitting/resting/sleeping) have now been incorporated.

Terms

Code: Select all

Race = Human or Trolloc
Ride = Ride Level (0-7)
Lvl = Character's Level (1-30)
Str = Strength stat
Dex = Dexterity stat
Con = Constitution stat
Weight = Total worn and carried weight
MaxW = Max weight allowance = ((8.5 * Str) + (3.5 * Con))
Wper = Weapon practice %        (IF Wper < 5%, Wper = 5%)       <-This is why wielding a weapon with no pracs still gives OB and PB->
Dper = Dodge practice %
Sper = Shield parry practice %  (IF Sper < 5%, Sper = 5%)       <-This is why wearing a shield with no pracs still gives PB->
Wpn_ob = Weapon's base OB value
Wpn_pb = Weapon's base PB value
Shield_db = Shield's DB malus
Shield_pb = Shield's base PB value
Eq_DB = Net total value of DB provided by all worn equipment and trinkets
Eq_PB = Net total value of PB provided by all worn equipment and trinkets

Lvl_ob_mood = Mood values used to modify Lvl
  Wimpy   = 7/3
  Normal  = 77/30
  Brave   = 161/60
  Berserk = 35/12
W_ob_mood = Mood values used to modify Ride and weapon OB
  Wimpy   = 1
  Normal  = 11/10
  Brave   = 23/20
  Berserk = 5/4
PB_mood = Mood values used for various PB modifications
  Wimpy   = 71/50
  Normal  = 13/10
  Brave   = 23/20
  Berserk = 1
Posture_ob = Added offensive bonus based on Master posture
  Non-master = 0
  Defensive  = 0
  Normal     = 5
  Offensive  = 10
Posture_pb = Added parry bonus based on Master posture
  Non-master = 0
  Defensive  = 15
  Normal     = 10
  Offensive  = 0
Position_ob = Position does not modify OB except when sleeping - handled during OB calcs
Position_db = Position values used to modify DB
  Standing = 1
  Sitting  = 1/4
  Resting  = 1/4
  Sleeping = handled during DB calcs
Position_pb = Position values used to modify PB
  Standing = 1
  Sitting  = 3/4
  Resting  = 3/4
  Sleeping = 1/2
Offensive Bonus

Code: Select all

IF (Hardened weapon) THEN 
  Wpn_ob = Wpn_ob + 5                                         <- Honing adds damage but no OB. Hardening adds 5 OB directly to the weapon's base OB ->
OB = Lvl * Lvl_ob_mood
OB = OB + ((Wper / 100) * (Str / 19) * (Wpn_ob * W_ob_mood))
IF (Race = Human and Ride > 0) THEN
  OB = OB + ((Ride + 4) * W_ob_mood)
OB = OB * (1 - ((5 * Weight) / (25 * MaxW)))                  <- OB is affected the least by total weight ->
OB = OB + Posture_ob                                          <- Add master posture bonus, if any ->
IF (Blind Status) THEN
  OB = OB / 2                                                 <- Blind status reduces OB by 50% ->
IF (Race = Human and Blind = 0)                               <- Darkness only affects humans, but not if blind ->
  OB = OB * 3 / 4                                             <- Darkness reduces OB by 25% ->
IF (Chill Status) THEN
  OB = OB * 9 / 10                                            <- Chill status reduces OB by 10% ->
IF (Contagion Status) THEN
  OB = OB / 2                                                 <- Contagion status reduces OB by 50% ->
IF (Position = Sleeping) THEN
  OB = 1                                                      <- Sleeping position reduces OB to 1 ->
OB = OB + 1                                                   <- All races get a +1 to OB ->
IF (Race = Trolloc) THEN
  OB = OB + 4                                                 <- Trollocs get a +4 OB boost ->
OB = Round(OB)
Dodge Bonus

Code: Select all

DB = (Lvl * 2 / 3)
DB = DB + ((Dper / 99) * (Dex / 19) * 70)
DB = DB + Shield_DB                                           <- All shields impose a DB malus before weight effects and rounding. ->
                                                              <- This is assigned and not a function of shield weight.->
IF (Race = Human and Ride > 0) THEN
  DB = DB + Ride - 11
DB = DB * (1 - ((5 * Weight) / (8 * MaxW)))                   <- DB is the most sensitive to total weight->
DB = DB + Eq_DB
IF (Blind Status) THEN
  DB = DB * 4 / 5                                             <- Blind status reduces DB by 20% ->
IF (Race = Human and Blind = 0)                               <- Darkness only affects humans, but not if blind ->
  DB = DB * 9 / 10                                            <- Darkness reduces DB by 10% ->
IF (Armor_Weave) THEN
  DB = DB + 10                                                <- Armor status adds 10 to DB ->
IF (Chill Status) THEN
  DB = DB * 9 / 10                                            <- Chill status reduces DB by 10% ->
IF (Contagion Status) THEN
  DB = DB * 4 / 5                                             <- Contagion status reduces DB by 20% ->
DB = DB * Position_DB                                         <- Position calcs ->
IF (Position = Sleeping) THEN
  DB = 1                                                      <- Sleeping position reduces DB to 1 ->
DB = Round(DB)
Parry Bonus

Code: Select all

IF (Lvl > 20) THEN
  Lvl = 20                                                    <- Naked PB does not increase after level 20 ->
PB = Lvl * PB_mood
PB = PB + ((Wper / 100) * (Str / 19) * (Wpn_pb * PB_mood))    <- PB from weapons is modified by Str only, and is the same whether 1 or 2-handed ->
PB = PB + ((Sper / 100) * (Dex / 19) * (Shield_pb * PB_mood)) <- PB from shields is modified by Dex only ->
PB = PB * (1 - ((5 * Weight) / (16 * MaxW)))                  <- PB is more sensitive to weight than OB, but less than DB ->
PB = PB + (Eq_PB * PB_mood)                                   <- PB from equipment is subject to mood modifiers. -> 
                                                              <- This is why some items seem to have fractional PB values in moods other than Berserk ->
PB = PB + Posture_pb                                          <- Add master posture bonus, if any ->
IF (Blind Status) THEN
  PB = PB / 2                                                 <- Blind status reduces PB by 50% ->
IF (Race = Human and Blind = 0)                               <- Darkness only affects humans, but not if blind ->
  PB = PB * 3 / 4                                             <- Darkness reduces PB by 25% ->
IF (Chill Status) THEN
  PB = PB * 9 / 10                                            <- Chill status reduces PB by 10% ->
IF (Contagion Status) THEN
  PB = PB / 2                                                 <- Contagion status reduces PB by 50% ->
PB = PB * Position_PB                                         <- Position calcs ->
PB = Round(PB)

Re: How OB, DB, and PB are Calculated

Posted: Fri Apr 01, 2016 9:43 pm
by Thuvia
Updated to show effects of Status ailments and Position on OB/DB/PB.