summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2018-02-22 17:32:07 +0100
committernsensfel <SpamShield0@noot-noot.org>2018-02-22 17:32:07 +0100
commit43e38e5fc54fd58e8230b2b5198b6d8cb625803c (patch)
treee435c19821de1d4de279dff7a6bf98bbac5aa7fd
parent60232453b2117ee4737b3b5b5b014b9088c92960 (diff)
Adding weapons server side...
-rw-r--r--src/query/character_turn.erl25
-rw-r--r--src/type/weapon.erl284
-rw-r--r--src/type/weapon_shim.erl14
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).