summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2018-02-27 17:19:59 +0100 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2018-02-27 17:19:59 +0100 |
commit | 8ed3e625a5576b6f43b966ee77e0f6de282a074e (patch) | |
tree | 0dbd68dc9e49d02861b1c27956b31fcce2bc6677 /src/struct/weapon.erl | |
parent | 292022649270d36c8ab0c813e4d7e07f3e067231 (diff) |
...
Diffstat (limited to 'src/struct/weapon.erl')
-rw-r--r-- | src/struct/weapon.erl | 110 |
1 files changed, 77 insertions, 33 deletions
diff --git a/src/struct/weapon.erl b/src/struct/weapon.erl index 41f99f8..d96886c 100644 --- a/src/struct/weapon.erl +++ b/src/struct/weapon.erl @@ -3,19 +3,39 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-opaque id() :: non_neg_integer(). + +-type range_type() :: 'ranged' | 'melee'. +-type range_mod() :: 'long' | 'short'. +-type damage_type() :: 'slash' | 'pierce' | 'blunt'. +-type damage_mod() :: 'heavy' | 'light'. + -record ( weapon, { - id, - name, - range_type, - range_mod, - damage_type, - damage_mod + id :: id(), + name :: binary(), + range_type :: range_type(), + range_mod :: range_mod(), + damage_type :: damage_type(), + damage_mod :: damage_mod() } ). +-opaque struct() :: #weapon{}. + +-export_type([struct/0, id/0]). +-export_type +( + [ + range_type/0, + range_mod/0, + damage_type/0, + damage_mod/0 + ] +). + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -42,11 +62,23 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec ranges_of_type + ( + range_type(), + range_mod() + ) + -> {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_mod() + ) + -> {non_neg_integer(), non_neg_integer()}. damages_of_type (ranged, heavy) -> {10, 25}; damages_of_type (ranged, light) -> {5, 20}; damages_of_type (melee, heavy) -> {20, 35}; @@ -56,19 +88,25 @@ damages_of_type (melee, light) -> {15, 30}. %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Accessors +-spec get_id (struct()) -> id(). get_id (Wp) -> Wp#weapon.id. +-spec get_range_type (struct()) -> range_type(). get_range_type (Wp) -> Wp#weapon.range_type. +-spec get_ranges (struct()) -> {non_neg_integer(), non_neg_integer()}. get_ranges (Wp) -> ranges_of_type(Wp#weapon.range_type, Wp#weapon.range_mod). + +-spec get_damages (struct()) -> {non_neg_integer(), non_neg_integer()}. get_damages (Wp) -> damages_of_type(Wp#weapon.range_type, Wp#weapon.damage_mod). +-spec from_id (id()) -> struct(). from_id (0) -> #weapon{ id = 0, - name = "None", + name = <<"None">>, range_type = melee, range_mod = short, damage_type = blunt, @@ -77,7 +115,7 @@ from_id (0) -> from_id (1) -> #weapon{ id = 1, - name = "Dagger", + name = <<"Dagger">>, range_type = melee, range_mod = short, damage_type = slash, @@ -86,7 +124,7 @@ from_id (1) -> from_id (2) -> #weapon{ id = 2, - name = "Sword", + name = <<"Sword">>, range_type = melee, range_mod = short, damage_type = slash, @@ -95,7 +133,7 @@ from_id (2) -> from_id (3) -> #weapon{ id = 3, - name = "Claymore", + name = <<"Claymore">>, range_type = melee, range_mod = long, damage_type = slash, @@ -104,7 +142,7 @@ from_id (3) -> from_id (4) -> #weapon{ id = 4, - name = "Bardiche", + name = <<"Bardiche">>, range_type = melee, range_mod = long, damage_type = slash, @@ -113,7 +151,7 @@ from_id (4) -> from_id (5) -> #weapon{ id = 5, - name = "Stiletto", + name = <<"Stiletto">>, range_type = melee, range_mod = short, damage_type = pierce, @@ -122,7 +160,7 @@ from_id (5) -> from_id (6) -> #weapon{ id = 6, - name = "Pickaxe", + name = <<"Pickaxe">>, range_type = melee, range_mod = short, damage_type = pierce, @@ -131,7 +169,7 @@ from_id (6) -> from_id (7) -> #weapon{ id = 7, - name = "Rapier", + name = <<"Rapier">>, range_type = melee, range_mod = long, damage_type = pierce, @@ -140,7 +178,7 @@ from_id (7) -> from_id (8) -> #weapon{ id = 8, - name = "Pike", + name = <<"Pike">>, range_type = melee, range_mod = long, damage_type = pierce, @@ -149,7 +187,7 @@ from_id (8) -> from_id (9) -> #weapon{ id = 9, - name = "Club", + name = <<"Club">>, range_type = melee, range_mod = short, damage_type = blunt, @@ -158,7 +196,7 @@ from_id (9) -> from_id (10) -> #weapon{ id = 10, - name = "Mace", + name = <<"Mace">>, range_type = melee, range_mod = short, damage_type = blunt, @@ -167,7 +205,7 @@ from_id (10) -> from_id (11) -> #weapon{ id = 11, - name = "Staff", + name = <<"Staff">>, range_type = melee, range_mod = long, damage_type = blunt, @@ -176,7 +214,7 @@ from_id (11) -> from_id (12) -> #weapon{ id = 12, - name = "War Hammer", + name = <<"War Hammer">>, range_type = melee, range_mod = long, damage_type = blunt, @@ -185,7 +223,7 @@ from_id (12) -> from_id (13) -> #weapon{ id = 13, - name = "Short Bow (Broadhead)", + name = <<"Short Bow (Broadhead)">>, range_type = ranged, range_mod = short, damage_type = slash, @@ -194,7 +232,7 @@ from_id (13) -> from_id (14) -> #weapon{ id = 14, - name = "Short Bow (Blunt)", + name = <<"Short Bow (Blunt)">>, range_type = ranged, range_mod = short, damage_type = blunt, @@ -203,7 +241,7 @@ from_id (14) -> from_id (15) -> #weapon{ id = 15, - name = "Short Bow (Bodkin Point)", + name = <<"Short Bow (Bodkin Point)">>, range_type = ranged, range_mod = short, damage_type = pierce, @@ -212,7 +250,7 @@ from_id (15) -> from_id (16) -> #weapon{ id = 16, - name = "Long Bow (Broadhead)", + name = <<"Long Bow (Broadhead)">>, range_type = ranged, range_mod = long, damage_type = slash, @@ -221,7 +259,7 @@ from_id (16) -> from_id (17) -> #weapon{ id = 17, - name = "Long Bow (Blunt)", + name = <<"Long Bow (Blunt)">>, range_type = ranged, range_mod = long, damage_type = blunt, @@ -230,7 +268,7 @@ from_id (17) -> from_id (18) -> #weapon{ id = 18, - name = "Long Bow (Bodkin Point)", + name = <<"Long Bow (Bodkin Point)">>, range_type = ranged, range_mod = long, damage_type = pierce, @@ -239,7 +277,7 @@ from_id (18) -> from_id (19) -> #weapon{ id = 19, - name = "Crossbow (Broadhead)", + name = <<"Crossbow (Broadhead)">>, range_type = ranged, range_mod = short, damage_type = slash, @@ -248,7 +286,7 @@ from_id (19) -> from_id (20) -> #weapon{ id = 20, - name = "Crossbow (Blunt)", + name = <<"Crossbow (Blunt)">>, range_type = ranged, range_mod = short, damage_type = blunt, @@ -257,7 +295,7 @@ from_id (20) -> from_id (21) -> #weapon{ id = 21, - name = "Crossbow (Bodkin Point)", + name = <<"Crossbow (Bodkin Point)">>, range_type = ranged, range_mod = short, damage_type = pierce, @@ -266,7 +304,7 @@ from_id (21) -> from_id (22) -> #weapon{ id = 22, - name = "Arbalest (Broadhead)", + name = <<"Arbalest (Broadhead)">>, range_type = ranged, range_mod = long, damage_type = slash, @@ -275,7 +313,7 @@ from_id (22) -> from_id (23) -> #weapon{ id = 23, - name = "Arbalest (Blunt)", + name = <<"Arbalest (Blunt)">>, range_type = ranged, range_mod = long, damage_type = blunt, @@ -284,16 +322,22 @@ from_id (23) -> from_id (24) -> #weapon{ id = 24, - name = "Arbalest (Bodkin Point)", + name = <<"Arbalest (Bodkin Point)">>, range_type = ranged, range_mod = long, damage_type = pierce, damage_mod = heavy }. -random_id () -> - roll:between(0, 24). +-spec random_id () -> id(). +random_id () -> roll:between(0, 24). +-spec apply_to_attributes + ( + attributes:struct(), + weapon:struct() + ) + -> attributes:struct(). apply_to_attributes (Attributes, Weapon) -> Dexterity = attributes:get_dexterity(Attributes), Speed = attributes:get_speed(Attributes), |