summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/shared/struct/shr_weapon.erl.m4')
-rw-r--r-- | src/shared/struct/shr_weapon.erl.m4 | 122 |
1 files changed, 13 insertions, 109 deletions
diff --git a/src/shared/struct/shr_weapon.erl.m4 b/src/shared/struct/shr_weapon.erl.m4 index 862edb6..55c2815 100644 --- a/src/shared/struct/shr_weapon.erl.m4 +++ b/src/shared/struct/shr_weapon.erl.m4 @@ -5,37 +5,21 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -type id() :: non_neg_integer(). --type range_type() :: 'ranged' | 'melee'. --type range_modifier() :: 'long' | 'short'. --type damage_type() :: 'slash' | 'pierce' | 'blunt'. --type damage_modifier() :: 'heavy' | 'light'. - -record ( weapon, { id :: id(), name :: binary(), - range_type :: range_type(), - range_mod :: range_modifier(), - damage_type :: damage_type(), - damage_mod :: damage_modifier(), - coef :: float() + range_min:: non_neg_integer(), + range_max :: non_neg_integer(), + omnimods :: shr_omnimods:type() } ). -opaque type() :: #weapon{}. -export_type([type/0, id/0]). --export_type -( - [ - range_type/0, - range_modifier/0, - damage_type/0, - damage_modifier/0 - ] -). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -46,13 +30,9 @@ [ get_id/1, get_name/1, - get_range_type/1, - get_range_modifier/1, - get_damage_type/1, - get_damage_modifier/1, - get_coefficient/1, - get_ranges/1, - get_damages/1 + get_minimum_range/1, + get_maximum_range/1, + get_omnimods/1 ] ). @@ -60,36 +40,13 @@ ( [ random_id/0, - from_id/1, - can_parry/1, - apply_to_attributes/2 + from_id/1 ] ). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec ranges_of_type - ( - range_type(), - range_modifier() - ) - -> {non_neg_integer(), non_neg_integer()}. -ranges_of_type (ranged, long) -> {2, 6}; -ranges_of_type (ranged, short) -> {1, 4}; -ranges_of_type (melee, long) -> {0, 2}; -ranges_of_type (melee, short) -> {0, 1}. - --spec damages_of_type - ( - range_type(), - damage_modifier() - ) - -> {non_neg_integer(), non_neg_integer()}. -damages_of_type (ranged, heavy) -> {15, 30}; -damages_of_type (ranged, light) -> {10, 25}; -damages_of_type (melee, heavy) -> {20, 35}; -damages_of_type (melee, light) -> {15, 30}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -101,33 +58,14 @@ get_id (Wp) -> Wp#weapon.id. -spec get_name (type()) -> binary(). get_name (Wp) -> Wp#weapon.name. --spec get_range_type (type()) -> range_type(). -get_range_type (Wp) -> Wp#weapon.range_type. - --spec get_range_modifier (type()) -> range_modifier(). -get_range_modifier (Wp) -> Wp#weapon.range_mod. - --spec get_damage_type (type()) -> damage_type(). -get_damage_type (Wp) -> Wp#weapon.damage_type. - --spec get_damage_modifier (type()) -> damage_modifier(). -get_damage_modifier (Wp) -> Wp#weapon.damage_mod. +-spec get_minimum_range (type()) -> non_neg_integer(). +get_minimum_range (Wp) -> Wp#weapon.range_min. --spec get_coefficient (type()) -> float(). -get_coefficient (Wp) -> Wp#weapon.coef. +-spec get_maximum_range (type()) -> non_neg_integer(). +get_maximum_range (Wp) -> Wp#weapon.range_max. --spec get_ranges (type()) -> {non_neg_integer(), non_neg_integer()}. -get_ranges (Wp) -> - ranges_of_type(Wp#weapon.range_type, Wp#weapon.range_mod). - --spec get_damages (type()) -> {non_neg_integer(), non_neg_integer()}. -get_damages (Wp) -> - Coef = Wp#weapon.coef, - {Min, Max} = damages_of_type(Wp#weapon.range_type, Wp#weapon.damage_mod), - {shr_math_util:ceil(Min * Coef), shr_math_util:ceil(Max * Coef)}. - --spec can_parry (type()) -> boolean(). -can_parry (Wp) -> (Wp#weapon.range_type == melee). +-spec get_omnimods (type()) -> shr_omnimods:type(). +get_omnimods (Wp) -> Wp#weapon.omnimods. -spec from_id (id()) -> type(). m4_include(__MAKEFILE_DATA_DIR/weapon/global.m4.conf)m4_dnl @@ -135,39 +73,5 @@ m4_include(__MAKEFILE_DATA_DIR/weapon/basic.m4d)m4_dnl from_id (_) -> from_id(0). - -spec random_id () -> id(). random_id () -> shr_roll:between(0, 24). - --spec apply_to_attributes - ( - type(), - shr_attributes:type() - ) - -> shr_attributes:type(). -apply_to_attributes (Weapon, Attributes) -> - Dexterity = shr_attributes:get_dexterity(Attributes), - Speed = shr_attributes:get_speed(Attributes), - RangeModifier = Weapon#weapon.range_mod, - DamageModifier = Weapon#weapon.damage_mod, - - Impact = (20.0 * Weapon#weapon.coef), - FullImpact = shr_math_util:ceil(Impact), - QuarterImpact = shr_math_util:ceil(Impact / 4.0), - - ResultingDexterity = - case RangeModifier of - long -> (Dexterity - FullImpact); - short -> (Dexterity - QuarterImpact) - end, - ResultingSpeed = - case DamageModifier of - heavy -> (Speed - FullImpact); - light -> (Speed - QuarterImpact) - end, - - S0Attributes = shr_attributes:set_unsafe_speed(ResultingSpeed, Attributes), - S1Attributes = - shr_attributes:set_unsafe_dexterity(ResultingDexterity, S0Attributes), - - S1Attributes. |