| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/shared/battle/Battle/Struct/Statistics.elm')
| -rw-r--r-- | src/shared/battle/Battle/Struct/Statistics.elm | 146 | 
1 files changed, 41 insertions, 105 deletions
| diff --git a/src/shared/battle/Battle/Struct/Statistics.elm b/src/shared/battle/Battle/Struct/Statistics.elm index 9847f1c..74eea8d 100644 --- a/src/shared/battle/Battle/Struct/Statistics.elm +++ b/src/shared/battle/Battle/Struct/Statistics.elm @@ -10,19 +10,17 @@ module Battle.Struct.Statistics exposing        get_double_hits,        get_critical_hits,        get_damage_modifier, +      get_damage_multiplier,        decode_category,        encode_category,        mod, -      new_raw, +      default,        is_percent     )  -- Elm -------------------------------------------------------------------------  import List --- Battle ---------------------------------------------------------------------- -import Battle.Struct.Attributes -  --------------------------------------------------------------------------------  -- TYPES -----------------------------------------------------------------------  -------------------------------------------------------------------------------- @@ -34,6 +32,7 @@ type Category =     | Accuracy     | DoubleHits     | CriticalHits +   | DamageModifier  type alias Type =     { @@ -44,120 +43,71 @@ type alias Type =        accuracy : Int,        double_hits : Int,        critical_hits : Int, -      damage_modifier : Float +      damage_modifier : Int     }  --------------------------------------------------------------------------------  -- LOCAL -----------------------------------------------------------------------  -------------------------------------------------------------------------------- -average : (List Int) -> Float -average l = ((toFloat (List.sum l)) / (toFloat (List.length l))) - -float_to_int : Float -> Int -float_to_int f = -   (ceiling f) - -gentle_squared_growth : Int -> Int -gentle_squared_growth v = (float_to_int (((toFloat v)^1.8)/20.0)) - -gentle_squared_growth_f : Float -> Int -gentle_squared_growth_f v = (float_to_int ((v^1.8)/20.0)) - -sudden_squared_growth : Int -> Int -sudden_squared_growth v = (float_to_int (((toFloat v)^2.5)/1000.0)) - -sudden_squared_growth_f : Float -> Int -sudden_squared_growth_f v = (float_to_int ((v^2.5)/1000.0)) - -sudden_exp_growth : Int -> Int -sudden_exp_growth v = (float_to_int (4.0^((toFloat v)/25.0))) - -sudden_exp_growth_f : Float -> Int -sudden_exp_growth_f f = (float_to_int (4.0^(f/25.0))) - -damage_base_mod : Float -> Float -damage_base_mod str = ((((str + 10) * 4)^1.5)/3000.0) - -make_movement_points_safe : Int -> Int -make_movement_points_safe val = (clamp 0 200 val) - -make_max_health_safe : Int -> Int -make_max_health_safe val = (max 1 val) - -make_dodges_safe : Int -> Int -make_dodges_safe val = (clamp 0 100 val) - -make_parries_safe : Int -> Int -make_parries_safe val = (clamp 0 75 val) - -make_accuracy_safe : Int -> Int -make_accuracy_safe val = (clamp 0 100 val) - -make_double_hits_safe : Int -> Int -make_double_hits_safe val = (clamp 0 100 val) - -make_critical_hits_safe : Int -> Int -make_critical_hits_safe val = (clamp 0 100 val) -  mod_movement_points : Int -> Type -> Type  mod_movement_points v t =     {t | -      movement_points = (make_movement_points_safe (t.movement_points + v)) +      movement_points = (t.movement_points + v)     }  mod_max_health : Int -> Type -> Type  mod_max_health v t =     {t | -      max_health = (make_max_health_safe (t.max_health + v)) +      max_health = (t.max_health + v)     }  mod_dodges : Int -> Type -> Type -mod_dodges v t = {t | dodges = (make_dodges_safe (t.dodges + v))} +mod_dodges v t = {t | dodges = (t.dodges + v)}  mod_parries : Int -> Type -> Type -mod_parries v t = {t | parries = (make_parries_safe (t.parries + v))} +mod_parries v t = {t | parries = (t.parries + v)}  mod_accuracy : Int -> Type -> Type -mod_accuracy v t = {t | accuracy = (make_accuracy_safe (t.accuracy + v))} +mod_accuracy v t = {t | accuracy = (t.accuracy + v)}  mod_double_hits : Int -> Type -> Type -mod_double_hits v t = -   {t | -      double_hits = (make_double_hits_safe (t.double_hits + v)) -   } +mod_double_hits v t = {t | double_hits = (t.double_hits + v)}  mod_critical_hits : Int -> Type -> Type -mod_critical_hits v t = -   {t | -      critical_hits = (make_critical_hits_safe (t.critical_hits + v)) -   } +mod_critical_hits v t = {t | critical_hits = (t.critical_hits + v)} + +mod_damage_modifier : Int -> Type -> Type +mod_damage_modifier v t = {t | damage_modifier = (t.damage_modifier + v)}  --------------------------------------------------------------------------------  -- EXPORTED --------------------------------------------------------------------  --------------------------------------------------------------------------------  get_movement_points : Type -> Int -get_movement_points t = t.movement_points +get_movement_points t = (max 0 t.movement_points)  get_max_health : Type -> Int -get_max_health t = t.max_health +get_max_health t = (max 1 t.max_health)  get_dodges : Type -> Int -get_dodges t = t.dodges +get_dodges t = (max 0 t.dodges)  get_parries : Type -> Int -get_parries t = t.parries +get_parries t = (max 0 t.parries)  get_accuracy : Type -> Int -get_accuracy t = t.accuracy +get_accuracy t = (max 0 t.accuracy)  get_double_hits : Type -> Int -get_double_hits t = t.double_hits +get_double_hits t = (max 0 t.double_hits)  get_critical_hits : Type -> Int -get_critical_hits t = t.critical_hits +get_critical_hits t = (max 0 t.critical_hits) -get_damage_modifier : Type -> Float -get_damage_modifier t = t.damage_modifier +get_damage_modifier : Type -> Int +get_damage_modifier t = (max 0 t.damage_modifier) + +get_damage_multiplier : Type -> Float +get_damage_multiplier t = ((toFloat (max 0 t.damage_modifier)) / 100.0)  mod : Category -> Int -> Type -> Type  mod cat v t = @@ -169,36 +119,20 @@ mod cat v t =        Accuracy -> (mod_accuracy v t)        DoubleHits -> (mod_double_hits v t)        CriticalHits -> (mod_critical_hits v t) +      DamageModifier -> (mod_damage_modifier v t) -new_raw : (Battle.Struct.Attributes.Type -> Type) -new_raw att = -   let -      constitution = (Battle.Struct.Attributes.get_effective_constitution att) -      dexterity = (Battle.Struct.Attributes.get_effective_dexterity att) -      intelligence = (Battle.Struct.Attributes.get_effective_intelligence att) -      mind = (Battle.Struct.Attributes.get_effective_mind att) -      speed = (Battle.Struct.Attributes.get_effective_speed att) -      strength = (Battle.Struct.Attributes.get_effective_strength att) -   in -      { -         movement_points = -            (gentle_squared_growth_f -               (average [mind, constitution, constitution, speed, speed, speed]) -            ), -         max_health = -            (gentle_squared_growth_f -               (average [constitution, constitution, constitution, mind]) -            ), -         dodges = (sudden_exp_growth_f (average [dexterity, mind, speed])), -         parries = -            (sudden_exp_growth_f -               (average [dexterity, intelligence, speed, strength]) -            ), -         accuracy = (sudden_squared_growth dexterity), -         double_hits = (sudden_squared_growth_f (average [mind, speed])), -         critical_hits = (sudden_squared_growth intelligence), -         damage_modifier = (damage_base_mod (toFloat strength)) -      } +default : Type +default = +   { +      movement_points = 0, +      max_health = 1, +      dodges = 0, +      parries = 0, +      accuracy = 0, +      double_hits = 0, +      critical_hits = 0, +      damage_modifier = 0 +   }  decode_category : String -> Category  decode_category str = @@ -209,6 +143,7 @@ decode_category str =        "pary" -> Parries        "accu" -> Accuracy        "dhit" -> DoubleHits +      "dmgm" -> DamageModifier        _  -> CriticalHits  encode_category : Category -> String @@ -221,6 +156,7 @@ encode_category cat =        Accuracy -> "accu"        DoubleHits -> "dhit"        CriticalHits -> "crit" +      DamageModifier -> "dmgm"  is_percent : Category -> Bool  is_percent cat = ((cat /= MaxHealth) && (cat /= MovementPoints)) | 


