summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2019-04-24 19:11:58 +0200
committernsensfel <SpamShield0@noot-noot.org>2019-04-24 19:11:58 +0200
commite68004ee70c9102d00df2925c05d1354a6315bc0 (patch)
tree45d208c7b21144f7ae6a5b97288b147e8456f29f /src/battle/struct
parente39c44eabaea7bafa58aa85593b80a6c55f907a3 (diff)
...
Diffstat (limited to 'src/battle/struct')
-rw-r--r--src/battle/struct/btl_action.erl (renamed from src/battle/struct/btl_battle_action.erl)11
-rw-r--r--src/battle/struct/btl_attack.erl166
-rw-r--r--src/battle/struct/btl_character_current_data.erl113
3 files changed, 97 insertions, 193 deletions
diff --git a/src/battle/struct/btl_battle_action.erl b/src/battle/struct/btl_action.erl
index 2c7564b..34dd46e 100644
--- a/src/battle/struct/btl_battle_action.erl
+++ b/src/battle/struct/btl_action.erl
@@ -1,4 +1,4 @@
--module(btl_battle_action).
+-module(btl_action).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -65,11 +65,11 @@ maybe_decode_move ([]) -> [];
maybe_decode_move (PathInBinary) ->
Path = lists:map(fun shr_direction:decode/1, PathInBinary),
- [#move { path = Path }].
+ [#move{ path = Path }].
-spec maybe_decode_attack (integer()) -> list(type()).
maybe_decode_attack (TargetIX) when (TargetIX < 0) -> [];
-maybe_decode_attack (TargetIX) -> [#attack { target_ix = TargetIX }].
+maybe_decode_attack (TargetIX) -> [#attack{ target_ix = TargetIX }].
-spec maybe_decode_weapon_switch (boolean()) -> list(type()).
maybe_decode_weapon_switch (false) -> [];
@@ -98,8 +98,5 @@ get_target_ix (_) ->
-spec get_category (type()) -> category().
get_category (Action) when is_record(Action, attack) -> attack;
get_category (Action) when is_record(Action, move) -> move;
-get_category (Action) when is_record(Action, switch_weapon) -> switch_weapon;
-get_category (Action) ->
- io:format("How'd you get there?~p~n", [Action]),
- true = Action.
+get_category (Action) when is_record(Action, switch_weapon) -> switch_weapon.
diff --git a/src/battle/struct/btl_attack.erl b/src/battle/struct/btl_attack.erl
index f0778f5..481e07f 100644
--- a/src/battle/struct/btl_attack.erl
+++ b/src/battle/struct/btl_attack.erl
@@ -1,5 +1,7 @@
-module(btl_attack).
+% FIXME: this module is mostly mechanics, not structure.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -112,28 +114,40 @@ roll_parry (DefenderStatistics, DefenderLuck) ->
shr_omnimods:type()
)
-> non_neg_integer().
-get_damage (Precision, IsCritical, AtkModifier, ActualAtkOmni, ActualDefOmni) ->
- S0DamageMultiplier =
- case Precision of
- misses -> 0;
- grazes -> 0.5;
- hits -> 1
- end,
-
- S1DamageMultiplier =
- case IsCritical of
- true -> (S0DamageMultiplier * 2);
- _ -> S0DamageMultiplier
- end,
-
- S2DamageMultiplier = (S1DamageMultiplier * AtkModifier),
+get_damage
+(
+ Precision,
+ IsCritical,
+ StartingDamageMultiplier,
+ AttackerOmnimods,
+ DefenderOmnimods
+) ->
+ ActualDamageMultiplier =
+ (
+ StartingDamageMultiplier
+ *
+ (
+ case Precision of
+ misses -> 0;
+ grazes -> 0.5;
+ hits -> 1
+ end
+ )
+ *
+ (
+ case IsCritical of
+ true -> 2;
+ _ -> 1
+ end
+ )
+ ),
ActualDamage =
shr_omnimods:get_attack_damage
(
- S2DamageMultiplier,
- ActualAtkOmni,
- ActualDefOmni
+ ActualDamageMultiplier,
+ AttackerOmnimods,
+ DefenderOmnimods
),
ActualDamage.
@@ -141,8 +155,8 @@ get_damage (Precision, IsCritical, AtkModifier, ActualAtkOmni, ActualDefOmni) ->
-spec effect_of_attack
(
order(),
- btl_character_current_data:type(),
- btl_character_current_data:type(),
+ shr_character:type(),
+ shr_character:type(),
boolean(),
integer(),
integer()
@@ -151,57 +165,63 @@ get_damage (Precision, IsCritical, AtkModifier, ActualAtkOmni, ActualDefOmni) ->
effect_of_attack
(
Order,
- AtkCurrData,
- DefCurrData,
+ Attacker,
+ Defender,
CanParry,
AttackerLuck,
DefenderLuck
) ->
- DefStats = btl_character_current_data:get_statistics(DefCurrData),
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%% Roll parry to see if the roles have to be swapped. %%%%%%%%%%%%%%%%%%%%%
+ DefenderStats = shr_character:get_statistics(Defender),
{ParryIsSuccessful, ParryPositiveLuckMod, ParryNegativeLuckMod} =
case CanParry of
- true -> roll_parry(DefStats, DefenderLuck);
+ true -> roll_parry(DefenderStats, DefenderLuck);
false -> {false, 0, 0}
end,
{
- ActualAtkData,
- ActualDefData,
- ActualAtkLuck,
- ActualDefLuck
+ ActualAttacker,
+ ActualDefender,
+ ActualAttackerLuck,
+ ActualDefenderLuck
} =
case ParryIsSuccessful of
- true -> {DefCurrData, AtkCurrData, DefenderLuck, AttackerLuck};
- false -> {AtkCurrData, DefCurrData, AttackerLuck, DefenderLuck}
+ true -> {Defender, Attacker, DefenderLuck, AttackerLuck};
+ false -> {Attacker, Defender, AttackerLuck, DefenderLuck}
end,
- ActualAtkStats = btl_character_current_data:get_statistics(ActualAtkData),
- ActualAtkOmni = btl_character_current_data:get_omnimods(ActualAtkData),
- ActualDefStats = btl_character_current_data:get_statistics(ActualDefData),
- ActualDefOmni = btl_character_current_data:get_omnimods(ActualDefData),
+ ActualAttackerStats = shr_character:get_statistics(ActualAttacker),
+ ActualAttackerOmnimods = shr_character:get_omnimods(ActualAttacker),
+ ActualDefenderStats = shr_character:get_statistics(ActualDefender),
+ ActualDefenderOmnimods = shr_character:get_omnimods(ActualDefender),
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{Precision, PrecisionPositiveLuckMod, PrecisionNegativeLuckMod} =
roll_precision
(
- ActualAtkStats,
- ActualDefStats,
- ActualDefLuck
+ ActualAttackerStats,
+ ActualDefenderStats,
+ ActualDefenderLuck
),
{IsCritical, CriticalPositiveLuckMod, CriticalNegativeLuckMod} =
- roll_critical_hit(ActualAtkStats, ActualAtkLuck),
+ roll_critical_hit(ActualAttackerStats, ActualAttackerLuck),
+
+ ActualAttackerDamageModifier =
+ shr_statistics:get_damage_modifier(ActualAttackerStats),
- AtkDamageModifier = shr_statistics:get_damage_modifier(ActualAtkStats),
Damage =
get_damage
(
Precision,
IsCritical,
- AtkDamageModifier,
- ActualAtkOmni,
- ActualDefOmni
+ ActualAttackerDamageModifier,
+ ActualAttackerOmnimods,
+ ActualDefenderOmnimods
),
{FinalAttackerLuckMod, FinalDefenderLuckMod} =
@@ -311,8 +331,8 @@ encode_precision (misses) -> <<"m">>.
-spec get_description_of
(
step(),
- btl_character_current_data:type(),
- btl_character_current_data:type(),
+ shr_character:type(),
+ shr_character:type(),
integer(),
integer()
)
@@ -320,36 +340,36 @@ encode_precision (misses) -> <<"m">>.
get_description_of
(
{first, CanParry},
- AtkCurrData,
- DefCurrData,
- AtkLuck,
- DefLuck
+ Attacker,
+ Defender,
+ AttackerLuck,
+ DefenderLuck
) ->
effect_of_attack
(
first,
- AtkCurrData,
- DefCurrData,
+ Attacker,
+ Defender,
CanParry,
- AtkLuck,
- DefLuck
+ AttackerLuck,
+ DefenderLuck
);
get_description_of
(
{second, CanParry},
- AtkCurrData,
- DefCurrData,
- AtkLuck,
- DefLuck
+ Attacker,
+ Defender,
+ AttackerLuck,
+ DefenderLuck
) ->
- AtkStats = btl_character_current_data:get_statistics(AtkCurrData),
+ AttackerStats = shr_character:get_statistics(Attacker),
AttackerDoubleAttackChance =
- shr_statistics:get_double_hits(AtkStats),
+ shr_statistics:get_double_hits(AttackerStats),
{_Roll, IsSuccessful, PositiveModifier, NegativeModifier} =
- shr_roll:percentage_with_luck(AttackerDoubleAttackChance, AtkLuck),
+ shr_roll:percentage_with_luck(AttackerDoubleAttackChance, AttackerLuck),
- NewAtkLuck = (AtkLuck + PositiveModifier),
- NewDefLuck = (DefLuck + NegativeModifier),
+ NewAttackerLuck = (AttackerLuck + PositiveModifier),
+ NewDefenderLuck = (DefenderLuck + NegativeModifier),
case IsSuccessful of
true ->
@@ -357,11 +377,11 @@ get_description_of
effect_of_attack
(
second,
- AtkCurrData,
- DefCurrData,
+ Attacker,
+ Defender,
CanParry,
- NewAtkLuck,
- NewDefLuck
+ NewAttackerLuck,
+ NewDefenderLuck
),
Result#attack
@@ -377,19 +397,19 @@ get_description_of
get_description_of
(
{counter, CanParry},
- AtkCurrData,
- DefCurrData,
- AtkLuck,
- DefLuck
+ Attacker,
+ Defender,
+ AttackerLuck,
+ DefenderLuck
) ->
effect_of_attack
(
counter,
- DefCurrData,
- AtkCurrData,
+ Defender,
+ Attacker,
CanParry,
- DefLuck,
- AtkLuck
+ DefenderLuck,
+ AttackerLuck
).
-spec apply_to_healths_and_lucks
diff --git a/src/battle/struct/btl_character_current_data.erl b/src/battle/struct/btl_character_current_data.erl
deleted file mode 100644
index 3f25345..0000000
--- a/src/battle/struct/btl_character_current_data.erl
+++ /dev/null
@@ -1,113 +0,0 @@
--module(btl_character_current_data).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--record
-(
- character_current_data,
- {
- attributes :: shr_attributes:type(),
- statistics :: shr_statistics:type(),
- omnimods :: shr_omnimods:type()
- }
-).
-
--opaque type() :: #character_current_data{}.
-
--export_type([type/0]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Accessors
--export
-(
- [
- get_attributes/1,
- get_statistics/1,
- get_omnimods/1
- ]
-).
-
--export
-(
- [
- new/2
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec location_to_omnimods
- (
- {non_neg_integer(), non_neg_integer()},
- shr_map:type()
- )
- -> shr_omnimods:type().
-location_to_omnimods (Location, Map) ->
- TileInstance = shr_map:get_tile_instance(Location, Map),
- TileClassID = shr_tile_instance:get_tile_id(TileInstance),
- Tile = shr_tile:from_id(TileClassID),
-
- shr_tile:get_omnimods(Tile).
-
--spec weapon_id_to_omnimods (shr_weapon:id()) -> shr_omnimods:type().
-weapon_id_to_omnimods (WeaponID) ->
- Weapon = shr_weapon:from_id(WeaponID),
-
- shr_weapon:get_omnimods(Weapon).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Accessors
--spec get_omnimods (type()) -> shr_omnimods:type().
-get_omnimods (Char) -> Char#character_current_data.omnimods.
-
--spec get_attributes (type()) -> shr_attributes:type().
-get_attributes (Char) -> Char#character_current_data.attributes.
-
--spec get_statistics (type()) -> shr_statistics:type().
-get_statistics (Char) -> Char#character_current_data.statistics.
-
-%%%% Utils
--spec new (btl_character:type(), shr_map:type()) -> type().
-new (Character, Map) ->
- PermanentOmnimods = btl_character:get_permanent_omnimods(Character),
-
- {WeaponID, _} = btl_character:get_weapon_ids(Character),
- WeaponOmnimods = weapon_id_to_omnimods(WeaponID),
-
- Location = btl_character:get_location(Character),
- TileOmnimods = location_to_omnimods(Location, Map),
-
- CurrentOmnimods =
- shr_omnimods:merge
- (
- shr_omnimods:merge(WeaponOmnimods, TileOmnimods),
- PermanentOmnimods
- ),
-
- CurrentAttributes =
- shr_omnimods:apply_to_attributes
- (
- CurrentOmnimods,
- shr_attributes:default()
- ),
-
- CurrentStatistics =
- shr_omnimods:apply_to_statistics
- (
- CurrentOmnimods,
- shr_statistics:new_raw(CurrentAttributes)
- ),
-
- #character_current_data
- {
- attributes = CurrentAttributes,
- statistics = CurrentStatistics,
- omnimods = CurrentOmnimods
- }.
-