summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/battlemap/struct')
-rw-r--r--src/battlemap/struct/bm_attack.erl42
-rw-r--r--src/battlemap/struct/bm_battle_action.erl2
-rw-r--r--src/battlemap/struct/bm_character.erl22
-rw-r--r--src/battlemap/struct/bm_character_turn_request.erl2
-rw-r--r--src/battlemap/struct/bm_weapon.erl360
5 files changed, 34 insertions, 394 deletions
diff --git a/src/battlemap/struct/bm_attack.erl b/src/battlemap/struct/bm_attack.erl
index fe7d8b8..c647dae 100644
--- a/src/battlemap/struct/bm_attack.erl
+++ b/src/battlemap/struct/bm_attack.erl
@@ -47,13 +47,13 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec roll_precision
(
- bm_statistics:type(),
- bm_statistics:type()
+ sh_statistics:type(),
+ sh_statistics:type()
)
-> precision().
roll_precision (AttackerStatistics, DefenderStatistics) ->
- DefenderDodges = bm_statistics:get_dodges(DefenderStatistics),
- AttackerAccuracy = bm_statistics:get_accuracy(AttackerStatistics),
+ DefenderDodges = sh_statistics:get_dodges(DefenderStatistics),
+ AttackerAccuracy = sh_statistics:get_accuracy(AttackerStatistics),
MissChance = max(0, (DefenderDodges - AttackerAccuracy)),
case sh_roll:percentage() of
X when (X =< MissChance) -> misses;
@@ -63,31 +63,31 @@ roll_precision (AttackerStatistics, DefenderStatistics) ->
-spec roll_damage
(
- bm_statistics:type(),
- bm_statistics:type()
+ sh_statistics:type(),
+ sh_statistics:type()
)
-> {non_neg_integer(), boolean()}.
roll_damage (AttackerStatistics, _DefenderStatistics) ->
{MinimumDamage, MaximumDamage} =
- bm_statistics:get_damages(AttackerStatistics),
+ sh_statistics:get_damages(AttackerStatistics),
MaximumRoll = max(1, MaximumDamage - MinimumDamage),
BaseDamage = MinimumDamage + (rand:uniform(MaximumRoll) - 1),
- CriticalHitChance = bm_statistics:get_critical_hits(AttackerStatistics),
+ CriticalHitChance = sh_statistics:get_critical_hits(AttackerStatistics),
case sh_roll:percentage() of
X when (X =< CriticalHitChance) -> {(BaseDamage * 2), true};
_ -> {BaseDamage, false}
end.
--spec roll_parry (bm_statistics:type()) -> boolean().
+-spec roll_parry (sh_statistics:type()) -> boolean().
roll_parry (DefenderStatistics) ->
- DefenderParryChance = bm_statistics:get_parries(DefenderStatistics),
+ DefenderParryChance = sh_statistics:get_parries(DefenderStatistics),
(sh_roll:percentage() =< DefenderParryChance).
-spec effect_of_attack
(
order(),
- bm_statistics:type(),
- bm_statistics:type(),
+ sh_statistics:type(),
+ sh_statistics:type(),
boolean()
)
-> type().
@@ -134,8 +134,8 @@ encode_precision (misses) -> <<"m">>.
-spec get_description_of
(
step(),
- bm_statistics:type(),
- bm_statistics:type()
+ sh_statistics:type(),
+ sh_statistics:type()
)
-> maybe_type().
get_description_of
@@ -152,7 +152,7 @@ get_description_of
DefenderStatistics
) ->
AttackerDoubleAttackChange =
- bm_statistics:get_double_hits(AttackerStatistics),
+ sh_statistics:get_double_hits(AttackerStatistics),
case sh_roll:percentage() of
X when (X =< AttackerDoubleAttackChange) ->
@@ -246,28 +246,28 @@ when
-spec get_sequence
(
non_neg_integer(),
- bm_weapon:type(),
- bm_weapon:type()
+ sh_weapon:type(),
+ sh_weapon:type()
)
-> list(step()).
get_sequence (AttackRange, AttackerWeapon, DefenderWeapon) ->
{AttackerDefenseRange, AttackerAttackRange} =
- bm_weapon:get_ranges(AttackerWeapon),
+ sh_weapon:get_ranges(AttackerWeapon),
{DefenderDefenseRange, DefenderAttackRange} =
- bm_weapon:get_ranges(DefenderWeapon),
+ sh_weapon:get_ranges(DefenderWeapon),
AttackerCanAttack = (AttackRange =< AttackerAttackRange),
AttackerCanAttack = true,
AttackerCanDefend =
(AttackerCanAttack and (AttackRange > AttackerDefenseRange)),
AttackerCanParry =
- (AttackerCanDefend and weapon:can_parry(AttackerWeapon)),
+ (AttackerCanDefend and sh_weapon:can_parry(AttackerWeapon)),
DefenderCanAttack = (AttackRange =< DefenderAttackRange),
DefenderCanDefend =
(DefenderCanAttack and (AttackRange > DefenderDefenseRange)),
DefenderCanParry =
- (DefenderCanDefend and weapon:can_parry(DefenderWeapon)),
+ (DefenderCanDefend and sh_weapon:can_parry(DefenderWeapon)),
First = {first, DefenderCanParry},
Second = {second, DefenderCanParry},
diff --git a/src/battlemap/struct/bm_battle_action.erl b/src/battlemap/struct/bm_battle_action.erl
index abdc1c6..9f9b50f 100644
--- a/src/battlemap/struct/bm_battle_action.erl
+++ b/src/battlemap/struct/bm_battle_action.erl
@@ -92,7 +92,7 @@ can_follow (switch_weapon, attack) -> true;
can_follow (move, attack) -> true;
can_follow (_, _) -> false.
--spec get_path (type()) -> list(direction:type()).
+-spec get_path (type()) -> list(bm_direction:type()).
get_path (Action) when is_record(Action, move) ->
Action#move.path;
get_path (_) ->
diff --git a/src/battlemap/struct/bm_character.erl b/src/battlemap/struct/bm_character.erl
index e797b74..5552a02 100644
--- a/src/battlemap/struct/bm_character.erl
+++ b/src/battlemap/struct/bm_character.erl
@@ -15,8 +15,8 @@
icon :: binary(),
portrait :: binary(),
attributes :: sh_attributes:type(),
- statistics :: bm_statistics:type(),
- weapon_ids :: {bm_weapon:id(), bm_weapon:id()},
+ statistics :: sh_statistics:type(),
+ weapon_ids :: {sh_weapon:id(), sh_weapon:id()},
location :: {non_neg_integer(), non_neg_integer()},
current_health :: non_neg_integer(),
active :: boolean()
@@ -78,8 +78,8 @@
)
-> {non_neg_integer(), non_neg_integer()}.
find_random_location (BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->
- X = roll:between(0, (BattlemapWidth - 1)),
- Y = roll:between(0, (BattlemapHeight - 1)),
+ X = sh_roll:between(0, (BattlemapWidth - 1)),
+ Y = sh_roll:between(0, (BattlemapHeight - 1)),
IsForbidden = lists:member({X, Y}, ForbiddenLocations),
@@ -117,10 +117,10 @@ get_portrait (Char) -> Char#character.portrait.
-spec get_attributes (type()) -> sh_attributes:type().
get_attributes (Char) -> Char#character.attributes.
--spec get_weapon_ids (type()) -> {bm_weapon:id(), bm_weapon:id()}.
+-spec get_weapon_ids (type()) -> {sh_weapon:id(), sh_weapon:id()}.
get_weapon_ids (Char) -> Char#character.weapon_ids.
--spec get_statistics (type()) -> bm_statistics:type().
+-spec get_statistics (type()) -> sh_statistics:type().
get_statistics (Char) -> Char#character.statistics.
-spec get_location (type()) -> {non_neg_integer(), non_neg_integer()}.
@@ -171,7 +171,7 @@ set_is_active (Active, Char) ->
-spec set_weapon_ids
(
- {bm_weapon:id(), bm_weapon:id()},
+ {sh_weapon:id(), sh_weapon:id()},
type()
)
-> type().
@@ -183,7 +183,7 @@ set_weapon_ids (WeaponIDs, Char) ->
-spec set_statistics
(
- bm_statistics:type(),
+ sh_statistics:type(),
type()
)
-> type().
@@ -206,9 +206,9 @@ set_statistics (Stats, Char) ->
random (ID, OwnerID, BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->
Location =
find_random_location(BattlemapWidth, BattlemapHeight, ForbiddenLocations),
- WeaponIDs = {bm_weapon:random_id(), bm_weapon:random_id()},
+ WeaponIDs = {sh_weapon:random_id(), sh_weapon:random_id()},
Attributes = sh_attributes:random(),
- Statistics = bm_statistics:new(Attributes, WeaponIDs),
+ Statistics = sh_statistics:new(Attributes, WeaponIDs),
IDAsListString = integer_to_list(ID),
IDAsBinaryString = list_to_binary(IDAsListString),
@@ -223,7 +223,7 @@ random (ID, OwnerID, BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->
weapon_ids = WeaponIDs,
statistics = Statistics,
location = Location,
- current_health = bm_statistics:get_health(Statistics),
+ current_health = sh_statistics:get_health(Statistics),
active = false
}.
diff --git a/src/battlemap/struct/bm_character_turn_request.erl b/src/battlemap/struct/bm_character_turn_request.erl
index d141d7e..f922211 100644
--- a/src/battlemap/struct/bm_character_turn_request.erl
+++ b/src/battlemap/struct/bm_character_turn_request.erl
@@ -68,7 +68,7 @@ decode (Map) ->
actions = Actions
}.
--spec get_player_id (type()) -> player:id().
+-spec get_player_id (type()) -> bm_player:id().
get_player_id (Request) -> Request#type.player_id.
-spec get_session_token (type()) -> binary().
diff --git a/src/battlemap/struct/bm_weapon.erl b/src/battlemap/struct/bm_weapon.erl
deleted file mode 100644
index 6c05799..0000000
--- a/src/battlemap/struct/bm_weapon.erl
+++ /dev/null
@@ -1,360 +0,0 @@
--module(bm_weapon).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% 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 :: id(),
- name :: binary(),
- range_type :: range_type(),
- range_mod :: range_mod(),
- damage_type :: damage_type(),
- damage_mod :: damage_mod()
- }
-).
-
--opaque type() :: #weapon{}.
-
--export_type([type/0, id/0]).
--export_type
-(
- [
- range_type/0,
- range_mod/0,
- damage_type/0,
- damage_mod/0
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Accessors
--export
-(
- [
- get_id/1,
- get_range_type/1,
- get_ranges/1,
- get_damages/1
- ]
-).
-
--export
-(
- [
- random_id/0,
- from_id/1,
- can_parry/1,
- apply_to_attributes/2
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% 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};
-damages_of_type (melee, light) -> {15, 30}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Accessors
--spec get_id (type()) -> id().
-get_id (Wp) -> Wp#weapon.id.
-
--spec get_range_type (type()) -> range_type().
-get_range_type (Wp) -> Wp#weapon.range_type.
-
--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) ->
- damages_of_type(Wp#weapon.range_type, Wp#weapon.damage_mod).
-
--spec can_parry (type()) -> boolean().
-can_parry (Wp) -> (Wp#weapon.range_type == melee).
-
--spec from_id (id()) -> type().
-from_id (0) ->
- #weapon{
- id = 0,
- 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
- }.
-
--spec random_id () -> id().
-random_id () -> sh_roll:between(0, 24).
-
--spec apply_to_attributes
- (
- sh_attributes:type(),
- bm_weapon:type()
- )
- -> attributes:type().
-apply_to_attributes (Attributes, Weapon) ->
- Dexterity = sh_attributes:get_dexterity(Attributes),
- Speed = sh_attributes:get_speed(Attributes),
- RangeModifier = Weapon#weapon.range_mod,
- DamageModifier = Weapon#weapon.damage_mod,
- WithRangeModifier =
- case RangeModifier of
- long ->
- sh_attributes:set_dexterity(max(0, (Dexterity - 20)), Attributes);
- _ -> Attributes
- end,
- case DamageModifier of
- heavy -> sh_attributes:set_speed(max(0, (Speed - 20)), WithRangeModifier);
- _ -> WithRangeModifier
- end.
-