summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2019-06-06 16:36:13 +0200
committernsensfel <SpamShield0@noot-noot.org>2019-06-06 16:36:13 +0200
commitc3afe2633025641dd02e05d6c55dd9cafc42b8a2 (patch)
tree3f3865aada81ffa88f5c559ca3da1fcf3dd7c254 /src/battle/mechanic/action
parentd6d0920325e77bf39da69006f8e86c2f900ca86b (diff)
It compiles and mostly passes Dialyzer's tests.
Diffstat (limited to 'src/battle/mechanic/action')
-rw-r--r--src/battle/mechanic/action/btl_action_attack.erl14
-rw-r--r--src/battle/mechanic/action/btl_action_switch_weapon.erl2
-rw-r--r--src/battle/mechanic/action/btl_turn_actions_opportunity_attack.erl178
3 files changed, 10 insertions, 184 deletions
diff --git a/src/battle/mechanic/action/btl_action_attack.erl b/src/battle/mechanic/action/btl_action_attack.erl
index 5989ad8..1953096 100644
--- a/src/battle/mechanic/action/btl_action_attack.erl
+++ b/src/battle/mechanic/action/btl_action_attack.erl
@@ -1,4 +1,4 @@
--module(btl_turn_actions_attack).
+-module(btl_action_attack).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -46,7 +46,7 @@ roll_precision_modifier (Statistics, TargetStatistics, TargetLuck) ->
shr_statistics:type(),
integer()
)
- -> {boolean(), integer(), integer()}.
+ -> {float(), integer(), integer()}.
roll_critical_modifier (Statistics, Luck) ->
CriticalHitChance = shr_statistics:get_critical_hits(Statistics),
{_Roll, IsSuccess, PositiveModifier, NegativeModifier} =
@@ -328,8 +328,8 @@ effect_of_attack
Category,
PrecisionModifier,
CriticalModifier,
- S1AttackerLuck,
- S1DefenderLuck
+ ParryIsSuccessful,
+ Damage
),
% If we "ataxia update" here, we'll get redundant ataxia updates, since
@@ -511,7 +511,11 @@ handle_attack_sequence
)
of
true ->
- Statistics = shr_character:get_statistics(S0Character),
+ Statistics =
+ shr_character:get_statistics
+ (
+ btl_character:get_base_character(S0Character)
+ ),
DoubleAttackChance = shr_statistics:get_double_hits(Statistics),
{_Roll, IsSuccessful, PositiveModifier, NegativeModifier} =
shr_roll:percentage_with_luck(DoubleAttackChance, S0PlayerLuck),
diff --git a/src/battle/mechanic/action/btl_action_switch_weapon.erl b/src/battle/mechanic/action/btl_action_switch_weapon.erl
index cf1a31a..7d8a81b 100644
--- a/src/battle/mechanic/action/btl_action_switch_weapon.erl
+++ b/src/battle/mechanic/action/btl_action_switch_weapon.erl
@@ -1,4 +1,4 @@
--module(btl_turn_actions_switch_weapon).
+-module(btl_action_switch_weapon).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/battle/mechanic/action/btl_turn_actions_opportunity_attack.erl b/src/battle/mechanic/action/btl_turn_actions_opportunity_attack.erl
deleted file mode 100644
index c1dbbdd..0000000
--- a/src/battle/mechanic/action/btl_turn_actions_opportunity_attack.erl
+++ /dev/null
@@ -1,178 +0,0 @@
--module(btl_turn_actions_opportunity_attack).
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export
-(
- [
- handle/2
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec handle
- (
- btl_action:type(),
- btl_character_turn_update:type()
- )
- -> {ok, btl_character_turn_update:type()}.
-handle (BattleAction, Update) ->
- {S0Update, Battle} = btl_character_turn_update:get_battle(Update),
- {S1Update, Character} = btl_character_turn_update:get_character(S0Update),
-
- DefendingPlayerIX = btl_character:get_player_index(Character),
- DefendingPlayer = btl_battle:get_player(DefendingPlayerIX, Battle),
- DefendingPlayerLuck = btl_player:get_luck(DefendingPlayer),
-
- AttackerIX = btl_action:get_target_ix(BattleAction),
- AttackerRef = btl_battle:get_character(AttackerIX, Battle),
- Attacker = btl_battle:resolve_character(AttackerRef, Battle),
-
- AttackingPlayerIX = btl_character:get_player_index(Attacker),
- AttackingPlayer = btl_battle:get_player(AttackingPlayerIX, Battle),
- AttackingPlayerLuck = btl_player:get_luck(AttackingPlayer),
-
- Attack = btl_attack:attack_of_opportunity(),
-
- AttackEffect =
- btl_attack:get_description_of
- (
- Attack,
- btl_character:get_base_character(Character),
- btl_character:get_base_character(Attacker),
- AttackingPlayerLuck,
- DefendingPlayerLuck
- ),
-
- {
- AttackResult,
- NewAttackerHealth,
- S0NewAttackerLuck,
- NewDefenderHealth,
- S0NewDefenderLuck
- } =
- btl_attack:apply_to_healths_and_lucks
- (
- AttackEffect,
- btl_character:get_current_health(Attacker),
- AttackingPlayerLuck,
- btl_character:get_current_health(Character),
- DefendingPlayerLuck
- ),
-
- S1NewAttackerLuck =
- case {(S0NewAttackerLuck =< -2), (S0NewAttackerLuck >= 2)} of
- {true, _} -> (S0NewAttackerLuck + 2);
- {_, true} -> (S0NewAttackerLuck - 2);
- _ -> 0
- end,
-
- S1NewDefenderLuck =
- case {(S0NewDefenderLuck =< -2), (S0NewDefenderLuck >= 2)} of
- {true, _} -> (S0NewDefenderLuck + 2);
- {_, true} -> (S0NewDefenderLuck - 2);
- _ -> 0
- end,
-
- {UpdatedAttackingPlayer, AttackingPlayerAtaxiaUpdate} =
- btl_player:ataxia_set_luck(S1NewAttackerLuck, AttackingPlayer),
-
- {UpdatedDefendingPlayer, DefendingPlayerAtaxiaUpdate} =
- btl_player:ataxia_set_luck(S1NewDefenderLuck, DefendingPlayer),
-
- {UpdatedCharacter, CharacterAtaxiaUpdate} =
- btl_character:ataxia_set_current_health(NewDefenderHealth, Character),
-
- {UpdatedAttackerRef, AttackerRefAtaxiaUpdate} =
- btl_character:ataxia_set_current_health(NewAttackerHealth, AttackerRef),
-
- {S0Battle, BattleAtaxiaUpdate0} =
- btl_battle:ataxia_set_player
- (
- AttackingPlayerIX,
- UpdatedAttackingPlayer,
- AttackingPlayerAtaxiaUpdate,
- Battle
- ),
-
- {S1Battle, BattleAtaxiaUpdate1} =
- btl_battle:ataxia_set_player
- (
- DefendingPlayerIX,
- UpdatedDefendingPlayer,
- DefendingPlayerAtaxiaUpdate,
- S0Battle
- ),
-
- {S2Battle, BattleAtaxiaUpdate2} =
- btl_battle:ataxia_set_character
- (
- AttackerIX,
- UpdatedAttackerRef,
- AttackerRefAtaxiaUpdate,
- S1Battle
- ),
-
- % Potential danger ahead: we're going to update both the 'character' and
- % 'battle' members of a btl_character_turn_update.
- % 'S1Update' is sure to have both up to date (as it's the result of 'get'
- % requests for both) and there is no risk of the 'battle' update influencing
- % 'character', making what follows safe.
-
- S2Update =
- btl_character_turn_update:ataxia_set_battle
- (
- S2Battle,
- false,
- ataxic:optimize
- (
- ataxic:sequence
- (
- [
- BattleAtaxiaUpdate0,
- BattleAtaxiaUpdate1,
- BattleAtaxiaUpdate2
- ]
- )
- ),
- S1Update
- ),
-
- S3Update =
- btl_character_turn_update:ataxia_set_character
- (
- UpdatedCharacter,
- CharacterAtaxiaUpdate,
- S2Update
- ),
-
- TimelineItem =
- btl_turn_result:new_character_attacked
- (
- AttackerIX,
- btl_character_turn_update:get_character_ix(S3Update),
- AttackResult,
- S0NewAttackerLuck,
- S0NewDefenderLuck
- ),
-
- S4Update = btl_character_turn_update:add_to_timeline(TimelineItem, S3Update),
-
- S5Update =
- case (NewDefenderHealth > 0) of
- true -> S4Update;
- false ->
- btl_victory_progression:handle_character_loss(Character, S4Update)
- end,
-
- {ok, S5Update}.