summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/battle/Battle/Struct/Attributes.elm.m4')
-rw-r--r--src/shared/battle/Battle/Struct/Attributes.elm.m4198
1 files changed, 198 insertions, 0 deletions
diff --git a/src/shared/battle/Battle/Struct/Attributes.elm.m4 b/src/shared/battle/Battle/Struct/Attributes.elm.m4
new file mode 100644
index 0000000..d008618
--- /dev/null
+++ b/src/shared/battle/Battle/Struct/Attributes.elm.m4
@@ -0,0 +1,198 @@
+module Battle.Struct.Attributes exposing
+ (
+ Type,
+ Category(..),
+ get_movement_points,
+ get_max_health,
+ get_dodges,
+ get_parries,
+ get_accuracy,
+ get_double_hits,
+ get_critical_hits,
+ get_damage_modifier,
+ get_damage_multiplier,
+ get_true_movement_points,
+ get_true_max_health,
+ get_true_dodges,
+ get_true_parries,
+ get_true_accuracy,
+ get_true_double_hits,
+ get_true_critical_hits,
+ get_true_damage_modifier,
+ decode_category,
+ encode_category,
+ mod,
+ default,
+ is_percent
+ )
+
+-- Elm -------------------------------------------------------------------------
+import List
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type Category =
+ MovementPoints
+ | MaxHealth
+ | Dodges
+ | Parries
+ | Accuracy
+ | DoubleHits
+ | CriticalHits
+ | DamageModifier
+
+type alias Type =
+ {
+ movement_points : Int,
+ max_health : Int,
+ dodges : Int,
+ parries : Int,
+ accuracy : Int,
+ double_hits : Int,
+ critical_hits : Int,
+ damage_modifier : Int
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+mod_movement_points : Int -> Type -> Type
+mod_movement_points v t =
+ {t |
+ movement_points = (t.movement_points + v)
+ }
+
+mod_max_health : Int -> Type -> Type
+mod_max_health v t =
+ {t |
+ max_health = (t.max_health + v)
+ }
+
+mod_dodges : Int -> Type -> Type
+mod_dodges v t = {t | dodges = (t.dodges + v)}
+
+mod_parries : Int -> Type -> Type
+mod_parries v t = {t | parries = (t.parries + v)}
+
+mod_accuracy : Int -> Type -> Type
+mod_accuracy v t = {t | accuracy = (t.accuracy + v)}
+
+mod_double_hits : Int -> Type -> Type
+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 = (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 = (max 0 t.movement_points)
+
+get_max_health : Type -> Int
+get_max_health t = (max 1 t.max_health)
+
+get_dodges : Type -> Int
+get_dodges t = (max 0 t.dodges)
+
+get_parries : Type -> Int
+get_parries t = (max 0 t.parries)
+
+get_accuracy : Type -> Int
+get_accuracy t = (max 0 t.accuracy)
+
+get_double_hits : Type -> Int
+get_double_hits t = (max 0 t.double_hits)
+
+get_critical_hits : Type -> Int
+get_critical_hits t = (max 0 t.critical_hits)
+
+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)
+
+get_true_movement_points : Type -> Int
+get_true_movement_points t = t.movement_points
+
+get_true_max_health : Type -> Int
+get_true_max_health t = t.max_health
+
+get_true_dodges : Type -> Int
+get_true_dodges t = t.dodges
+
+get_true_parries : Type -> Int
+get_true_parries t = t.parries
+
+get_true_accuracy : Type -> Int
+get_true_accuracy t = t.accuracy
+
+get_true_double_hits : Type -> Int
+get_true_double_hits t = t.double_hits
+
+get_true_critical_hits : Type -> Int
+get_true_critical_hits t = t.critical_hits
+
+get_true_damage_modifier : Type -> Int
+get_true_damage_modifier t = t.damage_modifier
+
+
+mod : Category -> Int -> Type -> Type
+mod cat v t =
+ case cat of
+ MaxHealth -> (mod_max_health v t)
+ MovementPoints -> (mod_movement_points v t)
+ Dodges -> (mod_dodges v t)
+ Parries -> (mod_parries 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)
+
+-- TODO: Link this to the server using tacticians-data.
+default : Type
+default =
+ {
+ movement_points = 8,
+ max_health = 1,
+ dodges = 0,
+ parries = 0,
+ accuracy = 0,
+ double_hits = 0,
+ critical_hits = 0,
+ damage_modifier = 0
+ }
+
+m4_include(__MAKEFILE_DATA_DIR/names.m4.conf)
+
+decode_category : String -> Category
+decode_category str =
+ case str of
+ "__SN_MAX_HEALTH" -> MaxHealth
+ "__SN_MOVEMENT_POINTS" -> MovementPoints
+ "__SN_DODGE" -> Dodges
+ "__SN_PARRY" -> Parries
+ "__SN_ACCURACY" -> Accuracy
+ "__SN_DOUBLE_HITS" -> DoubleHits
+ "__SN_DAMAGE_MODIFIER" -> DamageModifier
+ _ -> CriticalHits
+
+encode_category : Category -> String
+encode_category cat =
+ case cat of
+ MaxHealth -> "__SN_MAX_HEALTH"
+ MovementPoints -> "__SN_MOVEMENT_POINTS"
+ Dodges -> "__SN_DODGE"
+ Parries -> "__SN_PARRY"
+ Accuracy -> "__SN_ACCURACY"
+ DoubleHits -> "__SN_DOUBLE_HITS"
+ CriticalHits -> "__SN_CRITICAL_HIT"
+ DamageModifier -> "__SN_DAMAGE_MODIFIER"
+
+is_percent : Category -> Bool
+is_percent cat = ((cat /= MaxHealth) && (cat /= MovementPoints))