| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-02-22 17:32:07 +0100 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-02-22 17:32:07 +0100 | 
| commit | 43e38e5fc54fd58e8230b2b5198b6d8cb625803c (patch) | |
| tree | e435c19821de1d4de279dff7a6bf98bbac5aa7fd /src | |
| parent | 60232453b2117ee4737b3b5b5b014b9088c92960 (diff) | |
Adding weapons server side...
Diffstat (limited to 'src')
| -rw-r--r-- | src/query/character_turn.erl | 25 | ||||
| -rw-r--r-- | src/type/weapon.erl | 284 | ||||
| -rw-r--r-- | src/type/weapon_shim.erl | 14 | 
3 files changed, 254 insertions, 69 deletions
| diff --git a/src/query/character_turn.erl b/src/query/character_turn.erl index 5a8ee96..da5e5e1 100644 --- a/src/query/character_turn.erl +++ b/src/query/character_turn.erl @@ -180,40 +180,41 @@ handle_target (QueryState) ->        character_instance:get_location(QueryState#query_state.target_char_inst),     Dist =        battlemap:dist(QueryState#query_state.main_char_new_loc, TargetLoc), -   {_, AttackRange} = -      weapon:get_ranges +   AtkWeapon = +      weapon:from_id        ( -         weapon:from_id +         character_instance:get_active_weapon           ( -            character_instance:get_active_weapon -            ( -               QueryState#query_state.main_char_inst, -               QueryState#query_state.main_char -            ) +            QueryState#query_state.main_char_inst, +            QueryState#query_state.main_char           )        ), +   {_, AtkRange} = weapon:get_ranges(AtkWeapon),     io:format     ( -      "~nAttack from ~p to ~p (dist: ~p, range: ~p).~n", +      "~nAttack from ~p to ~p (wp: ~p, dist: ~p, range: ~p).~n",        [           QueryState#query_state.main_char_new_loc,           TargetLoc, +         weapon:get_id(AtkWeapon),           Dist, -         AttackRange +         AtkRange        ]     ), -   true = (Dist =< AttackRange), +   true = (Dist =< AtkRange),     TargetStatistics =        character_instance:get_statistics        (           QueryState#query_state.target_char_inst        ), +   {MinDamage, MaxDamage} = weapon:get_damages(AtkWeapon), +   Diff = max(1, MaxDamage - MinDamage),     NewTargetCharInst =        character_instance:mod_health        (           QueryState#query_state.target_char_inst,           statistics:get_health(TargetStatistics), -         -1 +         (MinDamage + rand:uniform(Diff) - 1)        ),     %% TODO: test for (and handle) riposte.     QueryState#query_state diff --git a/src/type/weapon.erl b/src/type/weapon.erl index c5533de..add445a 100644 --- a/src/type/weapon.erl +++ b/src/type/weapon.erl @@ -9,10 +9,10 @@     {        id,        name, -      icon, -      type, -      pwr_min, -      pwr_max +      range_type, +      range_mod, +      damage_type, +      damage_mod     }  ). @@ -23,12 +23,7 @@  -export  (     [ -      get_id/1, -      get_name/1, -      get_icon/1, -      get_type/1, -      get_max_power/1, -      get_min_power/1 +      get_id/1     ]  ). @@ -36,56 +31,257 @@  (     [        from_id/1, -      get_category/1, -      get_ranges/1 +      get_ranges/1, +      get_damages/1     ]  ).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -ranges_of_type (short_bow) ->    {2, 4}; -ranges_of_type (long_bow) ->     {2, 6}; -ranges_of_type (crossbow) ->     {2, 4}; -ranges_of_type (arbalest) ->     {2, 4}; -ranges_of_type (sword) ->        {1, 1}; -ranges_of_type (claymore) ->     {1, 2}; -ranges_of_type (mace) ->         {1, 1}; -ranges_of_type (war_hammer) ->   {1, 2}; -ranges_of_type (dagger) ->       {1, 1}; -ranges_of_type (spear) ->        {1, 2}. +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}. -category_of_type (short_bow) ->  physical; -category_of_type (long_bow) ->   physical; -category_of_type (crossbow) ->   physical; -category_of_type (arbalest) ->   physical; -category_of_type (sword) ->      physical; -category_of_type (claymore) ->   physical; -category_of_type (mace) ->       physical; -category_of_type (war_hammer) -> physical; -category_of_type (dagger) ->     physical; -category_of_type (spear) ->      physical. +damages_of_type (ranged, heavy) -> {10, 25}; +damages_of_type (ranged, light) -> {5, 20}; +damages_of_type (melee, heavy) -> {20, 35}; +damages_of_type (melee, light) -> {15, 30}.  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%% Accessors  get_id (Wp) -> Wp#weapon.id. -get_name (Wp) -> Wp#weapon.name. -get_icon (Wp) -> Wp#weapon.icon. -get_type (Wp) -> Wp#weapon.type. -get_max_power (Wp) -> Wp#weapon.pwr_max. -get_min_power (Wp) -> Wp#weapon.pwr_min. -get_ranges (Wp) -> ranges_of_type(Wp#weapon.type). -get_category (Wp) -> category_of_type(Wp#weapon.type). +get_ranges (Wp) -> +   ranges_of_type(Wp#weapon.range_type, Wp#weapon.range_mod). +get_damages (Wp) -> +   damages_of_type(Wp#weapon.range_type, Wp#weapon.damage_mod).  from_id (0) ->     #weapon{        id = 0, -      name = "Shim Weapon 0", -      icon = "0", -      type = sword, -      pwr_min = 10, -      pwr_max = 90 +      name = "None", +      range_type = melee, +      range_mod = short, +      damage_type = blunt, +      damage_mod = light +   }; +from_id (1) -> +   #weapon{ +      id = 1, +      name = "Dagger", +      range_type = melee, +      range_mod = short, +      damage_type = slash, +      damage_mod = light +   }; +from_id (2) -> +   #weapon{ +      id = 2, +      name = "Sword", +      range_type = melee, +      range_mod = short, +      damage_type = slash, +      damage_mod = heavy +   }; +from_id (3) -> +   #weapon{ +      id = 3, +      name = "Claymore", +      range_type = melee, +      range_mod = long, +      damage_type = slash, +      damage_mod = light +   }; +from_id (4) -> +   #weapon{ +      id = 4, +      name = "Bardiche", +      range_type = melee, +      range_mod = long, +      damage_type = slash, +      damage_mod = heavy +   }; +from_id (5) -> +   #weapon{ +      id = 5, +      name = "Stiletto", +      range_type = melee, +      range_mod = short, +      damage_type = pierce, +      damage_mod = light +   }; +from_id (6) -> +   #weapon{ +      id = 6, +      name = "Pickaxe", +      range_type = melee, +      range_mod = short, +      damage_type = pierce, +      damage_mod = heavy +   }; +from_id (7) -> +   #weapon{ +      id = 7, +      name = "Rapier", +      range_type = melee, +      range_mod = long, +      damage_type = pierce, +      damage_mod = light +   }; +from_id (8) -> +   #weapon{ +      id = 8, +      name = "Pike", +      range_type = melee, +      range_mod = long, +      damage_type = pierce, +      damage_mod = heavy +   }; +from_id (9) -> +   #weapon{ +      id = 9, +      name = "Club", +      range_type = melee, +      range_mod = short, +      damage_type = blunt, +      damage_mod = light +   }; +from_id (10) -> +   #weapon{ +      id = 10, +      name = "Mace", +      range_type = melee, +      range_mod = short, +      damage_type = blunt, +      damage_mod = heavy +   }; +from_id (11) -> +   #weapon{ +      id = 11, +      name = "Staff", +      range_type = melee, +      range_mod = long, +      damage_type = blunt, +      damage_mod = light +   }; +from_id (12) -> +   #weapon{ +      id = 12, +      name = "War Hammer", +      range_type = melee, +      range_mod = long, +      damage_type = blunt, +      damage_mod = heavy +   }; +from_id (13) -> +   #weapon{ +      id = 13, +      name = "Short Bow (Broadhead)", +      range_type = ranged, +      range_mod = short, +      damage_type = slash, +      damage_mod = light +   }; +from_id (14) -> +   #weapon{ +      id = 14, +      name = "Short Bow (Blunt)", +      range_type = ranged, +      range_mod = short, +      damage_type = blunt, +      damage_mod = light +   }; +from_id (15) -> +   #weapon{ +      id = 15, +      name = "Short Bow (Bodkin Point)", +      range_type = ranged, +      range_mod = short, +      damage_type = pierce, +      damage_mod = light +   }; +from_id (16) -> +   #weapon{ +      id = 16, +      name = "Long Bow (Broadhead)", +      range_type = ranged, +      range_mod = long, +      damage_type = slash, +      damage_mod = light +   }; +from_id (17) -> +   #weapon{ +      id = 17, +      name = "Long Bow (Blunt)", +      range_type = ranged, +      range_mod = long, +      damage_type = blunt, +      damage_mod = light +   }; +from_id (18) -> +   #weapon{ +      id = 18, +      name = "Long Bow (Bodkin Point)", +      range_type = ranged, +      range_mod = long, +      damage_type = pierce, +      damage_mod = light +   }; +from_id (19) -> +   #weapon{ +      id = 19, +      name = "Crossbow (Broadhead)", +      range_type = ranged, +      range_mod = short, +      damage_type = slash, +      damage_mod = heavy +   }; +from_id (20) -> +   #weapon{ +      id = 20, +      name = "Crossbow (Blunt)", +      range_type = ranged, +      range_mod = short, +      damage_type = blunt, +      damage_mod = heavy +   }; +from_id (21) -> +   #weapon{ +      id = 21, +      name = "Crossbow (Bodkin Point)", +      range_type = ranged, +      range_mod = short, +      damage_type = pierce, +      damage_mod = heavy +   }; +from_id (22) -> +   #weapon{ +      id = 22, +      name = "Arbalest (Broadhead)", +      range_type = ranged, +      range_mod = long, +      damage_type = slash, +      damage_mod = heavy +   }; +from_id (23) -> +   #weapon{ +      id = 23, +      name = "Arbalest (Blunt)", +      range_type = ranged, +      range_mod = long, +      damage_type = blunt, +      damage_mod = heavy +   }; +from_id (24) -> +   #weapon{ +      id = 24, +      name = "Arbalest (Bodkin Point)", +      range_type = ranged, +      range_mod = long, +      damage_type = pierce, +      damage_mod = heavy     }. diff --git a/src/type/weapon_shim.erl b/src/type/weapon_shim.erl index 7f8c714..e0364f0 100644 --- a/src/type/weapon_shim.erl +++ b/src/type/weapon_shim.erl @@ -3,18 +3,6 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --record -( -   weapon, -   { -      id, -      name, -      icon, -      type, -      pwr_min, -      pwr_max -   } -).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -33,4 +21,4 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -rand() -> (rand:uniform(22) - 1). +rand() -> (rand:uniform(25) - 1). | 


