summaryrefslogtreecommitdiff |
diff options
-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). |